ללעוג לשיטות בטלות עם מוקיטו

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

במדריך קצר זה אנו מתמקדים בלעג בָּטֵל שיטות עם Mockito.

כמו במאמרים אחרים שהתמקדו במסגרת Mockito (כגון Mockito Verify, Mockito When / Then ושיטות Mockito של Mockito), MyList הכיתה המוצגת להלן תשמש כשיתוף הפעולה במקרי מבחן.

נוסיף שיטה חדשה להדרכה זו:

class class MyList מרחיב את AbstractList {@Override public void add (int index, Element String) {// no-op}}

2. לעג ואימות פשוט

בָּטֵל ניתן להשתמש בשיטות עם Mockito's לעשות כלום(), doTrow (), and doAnswer () שיטות, מה שהופך ללעג ואימות אינטואיטיבי:

@Test הציבור בטל כאשר AddCalledVerified () {MyList myList = mock (MyList.class); doNothing (). when (myList) .add (isA (Integer.class), isA (String.class)); myList.add (0, ""); אמת (myList, פעמים (1)). הוסף (0, ""); }

למרות זאת, לעשות כלום() היא התנהגות ברירת המחדל של Mockito עבור בָּטֵל שיטות.

גרסה זו של whenAddCalledVerified () משיג את אותו הדבר כמו זה שלמעלה:

@Test הציבור בטל כאשר AddCalledVerified () {MyList myList = mock (MyList.class); myList (0, ""); אמת (myList, פעמים (1)). הוסף (0, ""); } 

DoTrow () יוצר חריג:

@Test (צפוי = Exception.class) חלל ציבורי givenNull_AddThrows () {MyList myList = mock (MyList.class); doThrow (). כאשר (myList) .add (isA (Integer.class), isNull ()); myList.add (0, null); } 

נכסה doAnswer () לְהַלָן.

3. לכידת טיעונים

סיבה אחת לבטל את התנהגות ברירת המחדל באמצעות לעשות כלום() זה לתפוס ויכוחים.

בדוגמה לעיל השתמשנו ב- תאשר() שיטה לבדוק את הטיעונים שהועברו לְהוֹסִיף().

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

במקרים אלה אנו משתמשים לעשות כלום() בדיוק כפי שעשינו לעיל, אך עם ArgumentCaptor:

@ מבחן ציבורי בטל כאשר AddCalledValueCaptured () {MyList myList = mock (MyList.class); ArgumentCaptor valueCapture = ArgumentCaptor.forClass (String.class); doNothing (). when (myList) .add (כל (Integer.class), valueCapture.capture ()); myList.add (0, "שנתפס"); assertEquals ("שנתפסו", valueCapture.getValue ()); } 

4. מענה לשיחה אל בָּטֵל

שיטה עשויה לבצע התנהגות מורכבת יותר מאשר הוספה או הגדרת ערך בלבד.

במצבים אלה, אנו יכולים להשתמש במוקיטו תשובה כדי להוסיף את ההתנהגות שאנחנו צריכים:

@Test ציבורי בטל כאשר AddCalledAnswered () {MyList myList = mock (MyList.class); doAnswer (קריאה -> {Object arg0 = invocation.getArgument (0); Object arg1 = invocation.getArgument (1); assertEquals (3, arg0); assertEquals ("תשובה לי", arg1); להחזיר null;}). (myList). להוסיף (any (Integer.class), any (String.class)); myList.add (3, "תשובה לי"); } 

כפי שהוסבר בתכונות Java 8 של Mockito, אנו משתמשים במבדה עם תשובה כדי להגדיר התנהגות מותאמת אישית עבור לְהוֹסִיף().

5. ללעג חלקי

לעגים חלקיים הם גם אפשרות. מוקיטו doCallRealMethod () יכול לשמש ל בָּטֵל שיטות:

@Test הציבור בטל כאשר AddCalledRealMethodCalled () {MyList myList = mock (MyList.class); doCallRealMethod (). כאשר (myList). להוסיף (כל (Integer.class), כל (String.class)); myList.add (1, "אמיתי"); אמת (myList, זמנים (1)). הוסף (1, "אמיתי"); } 

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

6. מסקנה

במאמר קצר זה סקרנו ארבע דרכים שונות לגישה בָּטֵל שיטות בעת בדיקה עם Mockito.

כמו תמיד, הדוגמאות זמינות בפרויקט GitHub זה.