קוטלין עם מוקיטו

1. הקדמה

קוטלין וג'אווה הולכים יד ביד. המשמעות היא שנוכל למנף את המספר העצום של ספריות Java קיימות בפרויקטים של קוטלין.

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

2. התקנה

ראשית, בואו ניצור פרויקט של Maven ונוסיף תלות ב- JUnit ו- Mockito ב- pom.xml:

 org.mockito mockito-core 3.3.3 מבחן junit junit 4.12 מבחן 

עלינו גם לומר ל- Maven שאנחנו עובדים עם Kotlin כך שהוא ירכז עבורנו את קוד המקור. עיין בתיעוד הרשמי של Kotlin למידע נוסף על אופן הגדרת התצורה pom.xml.

3. שימוש מוקיטו עם קוטלין

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

ממשק BookService {fun inStock (bookId: Int): Boolean fun lend (bookId: Int, memberId: Int)} 

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

class LendBookManager (val bookService: BookService) {קופה מהנה (bookId: Int, memberId: Int) {if (bookService.inStock (bookId)) {bookService.lend (bookId, memberId)} אחר {זרוק IllegalStateException ("הספר אינו זמין ")}}} 

יהיה קשה לכתוב בדיקות יחידה לשיטה זו מבלי להיות בעל יכולת ללעוג שירות ספרים - שם מוקיטו יועיל.

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

val mockBookService = Mockito.mock (BookService :: class.java) Mockito. `כאשר` (mockBookService. inStock (100)). ואז החזר (נכון) 

זה יאלץ את mockBookService מופע לחזור נָכוֹן בכל פעם שה- במלאי() השיטה נקראת עם הטיעון 100 (שימו לב שנאלצנו לברוח מ- מתי() שיטה באמצעות הטקסט האחורי; זה נדרש מאז מתי היא מילת מפתח שמורה בשפת קוטלין).

לאחר מכן נוכל להעביר את המופע הלעגני הזה LendBookManager במהלך האינסטיזציה, הפעל את השיטה שאנו רוצים לבדוק וודא כי לְהַלווֹת() שיטה נקראה כתוצאה מהפעולה:

מנהל val = LendBookManager (mockBookService) manager.checkout (100, 1) Mockito.verify (mockBookService) .lend (100, 1) 

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

@Test (צפוי = IllegalStateException :: מחלקה) מהנה כאשר BookIsNotAvailable_thenAnExceptionIsThrown () {val mockBookService = Mockito.mock (BookService :: class.java) Mockito.` When` (mockBookService. InStock (100)). ThenReturn (false) מנהל val = LendBookManager (mockBookService) manager.checkout (100, 1)} 

שמנו לב שלמבחן זה אנחנו אמרmockBookService לחזור שֶׁקֶר כשנשאל אם הספר עם מספר 100 נמצא במלאי. זה אמור לגרום ל לבדוק() קריאה לזרוק IllegalStateException.

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

4. מוקיטוקוטלין סִפְרִיָה

אנו יכולים לגרום לקוד שלנו להיראות כמו קוטלין יותר באמצעות ספריית קוד פתוח בשם mockito-kotlin. ספרייה זו עוטפת חלק מהפונקציונליות של Mockito סביב השיטות שלה, ומספקת API פשוט יותר:

@Test כיף כאשר BookIsAvailable_thenLendMethodIsCalled () {val mockBookService: BookService = mock () בכל פעם (mockBookService.inStock (100)). ואז החזר (true) val manager = LendBookManager (mockBookService) manager. Checkout (100, 1) אמת (mockBookService). (100, 1)}

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

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

בדוק את הוויקי שלהם לקבלת רשימה מלאה של שיפורים.

5. מסקנה

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

כמו תמיד, תוכלו לבדוק את המקור המלא ברפיונו של GitHub.


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