בדיקת התקשרות חוזרות עם מוקיטו

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

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

נבדוק שני פתרונות, ראשית באמצעות ArgumentCaptor ואז האינטואיטיבי doAnswer () שיטה.

למידע נוסף על בדיקות טובות עם Mockito, עיין בסדרת Mockito שלנו כאן.

2. מבוא להתקשרות חוזרת

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

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

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

במדריך זה נשתמש ב- שֵׁרוּת הממשק המוצג להלן כמשתף פעולה במקרי מבחן:

שירות ממשק ציבורי {void doAction (בקשת מחרוזת, התקשרות חוזרת); }

בתוך ה התקשר חזרה אנו עוברים כיתה שתטפל בתגובה באמצעות ה- תשובה (תגובה T) שיטה:

ממשק ציבורי התקשרות חוזרת {תשובה בטלה (תגובת T); } 

2.1. שירות פשוט

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

בטל ציבורי doAction () {service.doAction ("הבקשה שלנו", התקשרות חוזרת חדשה () {@ ביטול ביטול בטל ציבורי (תגובה תגובה) {handleResponse (תגובה);}}); } 

ה handleResponse השיטה בודקת אם התגובה תקפה לפני שמוסיפים נתונים מסוימים תְגוּבָה לְהִתְנַגֵד:

handle ריק ריק (Response response) {if (response.isValid ()) {response.setData (נתונים חדשים ("תגובה נתונים מוצלחת")); }}

לשם הבהרה, בחרנו לא להשתמש בביטוי Java Lamda אלא ב- service.doActionניתן היה לכתוב את השיחה בצורה תמציתית יותר:

service.doAction ("הבקשה שלנו", תגובה -> handleResponse (תגובה)); 

למידע נוסף על ביטויים למבדה עיין כאן.

3. שימוש ב- ArgumentCaptor

עכשיו בואו נסתכל על כיצד אנו משתמשים במוקיטו כדי לתפוס את התקשר חזרה אובייקט באמצעות ArgumentCaptor:

@Test הציבור בטל givenServiceWithValidResponse_whenCallbackReceived_thenProcessed () {מטפל ActionHandler = חדש ActionHandler (שירות); handler.doAction (); אמת (שירות). doAction (anyString (), callbackCaptor.capture ()); Callback callback = callbackCaptor.getValue (); תגובה תגובה = תגובה חדשה (); callback. תגובה (תגובה); מחרוזת expectMessage = "תגובת נתונים מוצלחת"; נתוני נתונים = response.getData (); assertEquals ("אמורה לקבל הודעה מוצלחת:", expectMessage, data.getMessage ()); }

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

לאחר מכן, אנו מאמתים זאת doAction נקרא כשמופע השירות המדומה שלנו עובר anyString () כטענה הראשונה ו callbackCaptor.capture () כמו השני, שבו אנו לוכדים את התקשר חזרה לְהִתְנַגֵד. ה getValue () לאחר מכן ניתן להשתמש בשיטה להחזרת הערך שנתפס של הארגומנט.

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

4. באמצעות doAnswer () שיטה

עכשיו נסתכל על א פיתרון נפוץ לשיטות דקירה שיש להן התקשרות חוזרות באמצעות Mockito's תשובה חפץ ו doAnswer שיטה לדקור את שיטת הריקפעולה:

@Test ציבורי בטל givenServiceWithInvalidResponse_whenCallbackReceived_thenNotProcessed () {תגובה תגובה = תגובה חדשה (); response.setIsValid (שקר); doAnswer ((תשובה) קריאה -> {Callback callback = invocation.getArgument (1); callback.reply (response); Data data = response.getData (); assertNull ("אין נתונים בתגובה לא חוקית:", נתונים); null;}). כאשר (שירות) .doAction (anyString (), כל (Callback.class)); מטפל ActionHandler = ActionHandler חדש (שירות); handler.doAction (); } 

ובדוגמה השנייה שלנו, ראשית אנו יוצרים פסול תְגוּבָה אובייקט שישמש בהמשך הבדיקה.

לאחר מכן, הקמנו את תשובה על השירות המדומה שלנו כך שמתי doAction נקרא, אנו מיירטים את הקריאה ותופסים את טיעוני השיטה באמצעות invocation.getArgument (1) להשיג את התקשר חזרה טַעֲנָה.

השלב האחרון הוא ליצור את ActionHandler ולהתקשר doAction שגורם ל תשובה שיופעל.

למידע נוסף אודות שיטות הריקון הדקירות, הסתכל כאן.

3. מסקנה

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

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


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