Mockito.mock () לעומת @Mock vs @MockBean

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

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

2. Mockito.mock ()

ה Mockito.mock () השיטה מאפשרת לנו ליצור אובייקט מדומה של מחלקה או ממשק.

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

בואו נסתכל על דוגמה:

@Test הציבור בטל givenCountMethodMocked_WhenCountInvoked_ThenMockedValueReturned () {UserRepository localMockRepository = Mockito.mock (UserRepository.class); Mockito.when (localMockRepository.count ()). ואז החזר (111L); userCount ארוך = localMockRepository.count (); Assert.assertEquals (111 ליטר, UserCount); Mockito.verify (localMockRepository) .count (); }

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

3. של מוקיטו @לִלְעוֹג ביאור

ביאור זה הוא קיצור של Mockito.mock () שיטה. כמו כן, עלינו להשתמש בו רק בשיעור מבחן. לא כמו ה לִלְעוֹג() בשיטה, עלינו לאפשר להערות Mockito להשתמש בהערה זו.

אנו יכולים לעשות זאת באמצעות MockitoJUnitRunner להריץ את המבחן או להתקשר אל MockitoAnnotations.initMocks () שיטה במפורש.

בואו נסתכל על דוגמה באמצעות MockitoJUnitRunner:

@RunWith (MockitoJUnitRunner.class) מחלקה ציבורית MockAnnotationUnitTest {@Mock UserRepository mockRepository; @Test הציבור בטל givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned () {Mockito.when (mockRepository.count ()). ThenReturn (123L); userCount ארוך = mockRepository.count (); Assert.assertEquals (123L, userCount); Mockito.verify (mockRepository) .count (); }}

מלבד הפיכת הקוד לקריא יותר, @לִלְעוֹג מקל על איתור הבעיה המדומה במקרה של כישלון, שכן שם השדה מופיע בהודעת הכשל:

מבוקש אך לא מופעל: mockRepository.count (); -> ב- org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) למעשה, היו אפס אינטראקציות עם הלעג הזה. באתר org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) 

כמו כן, כאשר משתמשים בשילוב עם @InjectMocks, זה יכול להפחית את כמות קוד ההתקנה באופן משמעותי.

4. מגפי אביב @MockBean ביאור

אנחנו יכולים להשתמש ב- @MockBean כדי להוסיף אובייקטים מדומים להקשר יישום האביב. המוק יחליף כל שעועית קיימת מאותו סוג בהקשר היישום.

אם לא מוגדרת שעועית מאותו סוג, תתווסף אחת חדשה. הערה זו שימושית במבחני אינטגרציה שבהם צריך ללעוג לשעועית מסוימת - למשל שירות חיצוני.

כדי להשתמש בהערה זו, עלינו להשתמש ספרינג ראנר להריץ את המבחן:

@RunWith (SpringRunner.class) מחלקה ציבורית MockBeanAnnotationIntegrationTest {@MockBean UserRepository mockRepository; הקשר @Autowired ApplicationContext; @Test הציבור בטל givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned () {Mockito.when (mockRepository.count ()). ThenReturn (123L); UserRepository userRepoFromContext = context.getBean (UserRepository.class); userCount ארוך = userRepoFromContext.count (); Assert.assertEquals (123L, userCount); Mockito.verify (mockRepository) .count (); }}

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

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

5. מסקנה

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

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


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