Mockito ו- JUnit 5 - שימוש ב- ExtendWith

1. הקדמה

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

ראשית, נראה כיצד ליצור סיומת היוצרת באופן אוטומטי אובייקטים מדומים לכל מאפיין מחלקה או פרמטר שיטה המאושר @לִלְעוֹג.

לאחר מכן, נשתמש בתוסף Mockito שלנו בשיעור מבחן JUnit 5.

2. תלות Maven

2.1. תלות נדרשת

בואו נוסיף את JUnit 5 (צדק) ו- מוקיטו תלות שלנו pom.xml:

 org.junit.jupiter junit-jupiter-engine 5.3.1 test org.mockito mockito-core 2.21.0 test 

ציין זאת ג'וניט-צדק-מנוע היא ספריית JUnit 5 הראשית, ו- junit-platform-launcher משמש עם תוסף Maven ומשגר IDE.

2.2. תוסף Surefire

בואו להגדיר גם את התוסף Maven Surefire כך שיפעיל את שיעורי הבדיקה שלנו באמצעות משגר הפלטפורמה החדש של JUnit:

 maven-surefire-plugin 2.19.1 org.junit.platform junit-platform-surefire-provider 1.0.1 

2.3. תלות תאימות של JUnit 4 IDE

כדי שמקרי הבדיקה שלנו יהיו תואמים ל- JUnit4 (וינטג '), עבור IDEs שעדיין אין להם תמיכה ב- JUnit 5, בוא נכלול את התלות הבאות:

 org.junit.platform junit-platform-runner 1.2.0 test org.junit.vintage junit-vintage-engine 5.2.0 test 

כמו כן, עלינו לשקול להוסיף הערות לכל שיעורי המבחן שלנו @RunWith (JUnitPlatform.class)

הגרסאות האחרונות של ג'וניט-צדק-מנוע, junit-vintage-engine, junit-platform-launcher, ו mockito-core ניתן להוריד מ Maven Central.

3. הארכת מוקיטו

מוקיטו מספק יישום עבור סיומות JUnit5 בספריה - מוקיטו-שונית-צדק. אנו נכלול את התלות הזו בתוכנו pom.xml:

 org.mockito מבחן mockito-junit-jupiter 2.23.0 

4. בניית כיתת המבחן

בואו לבנות את כיתת הבדיקה שלנו ולצרף אליה את הרחבה Mockito:

@ExtendWith (MockitoExtension.class) @RunWith (JUnitPlatform.class) מחלקה ציבורית UserServiceUnitTest {UserService userService; ... //}

אנחנו יכולים להשתמש ב- @לִלְעוֹג ביאור להזרקת דמה למשתנה מופע בו נוכל להשתמש בכל מקום בכיתת הבדיקה:

@Mock UserRepository userRepository;

כמו כן, אנו יכולים להזרים אובייקטים מדומים לפרמטרים של השיטה:

@BeforeEach ריק ריק (@Mock SettingRepository settingRepository) {userService = DefaultUserService חדש (userRepository, settingRepository, mailClient); Mockito.lenient (). When (settingRepository.getUserMinAge ()). ThenReturn (10); כאשר (settingRepository.getUserNameMinLength ()). thenReturn (4); Mockito.lenient () .when (userRepository.isUsernameAlreadyExists (any (String.class))) .thenReturn (false); }

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

אנו יכולים אפילו להזרים אובייקט מדומה לפרמטר של שיטת בדיקה:

@Test בטל givenValidUser_whenSaveUser_thenSucceed (@Mock MailClient mailClient) {// נתון משתמש = משתמש חדש ("ג'רי", 12); כאשר (userRepository.insert (כל (User.class))). ואז (תשובה חדשה () {int רצף = 1; @Override תשובת משתמש ציבורית (InvocationOnMock הפעלה) זורק {User user = (User) invocation.getArgument זרק) user; setId (רצף ++); משתמש חוזר;}}); userService = DefaultUserService חדש (userRepository, settingRepository, mailClient); // כאשר משתמש insertUser = userService.register (משתמש); // ואז אמת (userRepository) .insert (user); Assertions.assertNotNull (user.getId ()); אמת (mailClient) .sendUserRegistrationMail (insertUser); }

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

5. מסקנה

ג'וניט 5 סיפקה דגם נחמד להארכה. הדגמנו סיומת פשוטה של ​​Mockito שפשטה את ההיגיון שלנו ליצירת דמה.

כל הקוד המשמש במאמר זה ניתן למצוא ב- com.baeldung.junit5.mockito חבילה של פרויקט GitHub, יחד עם כמה שיטות בדיקה נוספות ליחידות.