לגלוג על שיטות פרטיות באמצעות PowerMock

1. סקירה כללית

אחד האתגרים שבבדיקת יחידות הוא ללעג לשיטות פרטיות.

במדריך זה נלמד כיצד אנו יכולים להשיג זאת באמצעות ספריית PowerMock - הנתמכת על ידי JUnit ו- TestNG.

PowerMock משתלב במסגרות ללעג כמו EasyMock ו- Mockito ונועד להוסיף פונקציונליות נוספת לאלה - כמו ללעג למתודות פרטיות, שיעורים אחרונים ושיטות סופיות, וכו '

היא עושה זאת על ידי הסתמכות על מניפולציה של קוד-קוד ומעמיס כיתות נפרד לחלוטין.

2. תלות Maven

ראשית, בואו להוסיף תלות נדרשת לשימוש ב- PowerMock עם Mockito ו- JUnit לתוך שלנו pom.xml:

 מבחן org.powermock powermock-module-junit4 1.7.3 org.powermock powermock-api-mockito2 1.7.3 

ניתן לבדוק את הגרסאות האחרונות כאן וכאן.

3. דוגמא

בוא נתחיל בדוגמה של א LuckyNumberGenerator. בכיתה זו יש שיטה ציבורית אחת ליצירת מספר מזל:

public int getLuckyNumber (שם מחרוזת) {saveIntoDatabase (שם); if (name == null) {return getDefaultLuckyNumber (); } להחזיר getComputedLuckyNumber (name.length ()); }

4. שינויים בלעג של שיטות פרטיות

לצורך בדיקת יחידות ממצה של השיטה, נצטרך ללעוג לשיטות פרטיות.

4.1. שיטה ללא ויכוחים אך עם ערך החזר

כדוגמה פשוטה, בואו ללעוג להתנהגותה של שיטה פרטית ללא טיעונים ונאלץ אותה להחזיר את הערך הרצוי:

LuckyNumberGenerator מדומה = מרגל (LuckyNumberGenerator חדש ()); מתי (מדומה, "getDefaultLuckyNumber"). ואז החזר (300); 

במקרה זה אנו לועגים לשיטה הפרטית getDefaultLuckyNumber ולהפוך אותו להחזרת ערך של 300.

4.2. שיטה עם ערך ויכוח ותשואה

לאחר מכן, בואו ללעוג להתנהגות של שיטה פרטית עם טיעון ונאלץ אותה להחזיר את הערך הרצוי:

LuckyNumberGenerator מדומה = מרגל (LuckyNumberGenerator חדש ()); doReturn (1) .when (מדומה, "getComputedLuckyNumber", ArgumentMatchers.anyInt ()); 

במקרה זה אנו לועגים לשיטה הפרטית וגורמים לה להחזיר 1.

שימו לב שלא אכפת לנו מוויכוח הקלט והשימוש בו ArgumentMatchers.anyInt () כקלף כללי.

4.3. אימות קריאה לשיטה

האסטרטגיה הסופית שלנו היא להשתמש ב- PowerMock כדי לאמת הפעלת שיטה פרטית:

LuckyNumberGenerator מדומה = מרגל (LuckyNumberGenerator חדש ()); int result = mock.getLuckyNumber ("טירנוזאורוס"); verifyPrivate (מדומה) .invoke ("saveIntoDatabase", ArgumentMatchers.anyString ()); 

5. מילת זהירות

לבסוף, למרות שניתן לבדוק שיטות פרטיות באמצעות PowerMock, עלינו להיות זהירים במיוחד בעת שימוש בטכניקה זו.

בהתחשב בכוונת הבדיקה שלנו לאמת את התנהגות הכיתה, עלינו להימנע משינוי ההתנהגות הפנימית של הכיתה במהלך בדיקות היחידה.

יש ליישם טכניקות ללעג על התלות החיצונית של הכיתה ולא על הכיתה עצמה.

אם לגלוג על שיטות פרטיות הוא חיוני לבדיקת השיעורים שלנו, זה בדרך כלל מעיד על עיצוב רע.

6. מסקנה

במאמר מהיר זה, הראינו כיצד ניתן להשתמש ב- PowerMock כדי להרחיב את היכולת של Mockito ללעוג ואימות של שיטות פרטיות בכיתה הנבדקת.

את קוד המקור של הדרכה זו ניתן למצוא באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found