הזרקת Mockito Mocks לפולי אביב

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

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

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

הזרקת דמה היא דרך נקייה להכניס בידוד כזה.

2. תלות Maven

אנו זקוקים לתלות Maven הבאות לבדיקות היחידות ולאובייקטים המדומים:

 org.springframework.boot spring-boot-starter 2.2.2.RELEASE org.springframework.boot spring-boot-starter-test 2.2.2.RELEASE org.mockito mockito-core 2.21.0 

החלטנו להשתמש ב- Spring Boot לדוגמא זו, אך גם Spring הקלאסי יעבוד מצוין.

3. כתיבת המבחן

3.1. ההיגיון העסקי

ראשית, בואו ניצור שירות פשוט אותו נבדוק:

@Service מחלקה ציבורית NameService {public String getUserName (מזהה מחרוזת) {להחזיר "שם משתמש אמיתי"; }}

ולהזריק אותו לתוך שירות משתמש מעמד:

@Service מחלקה ציבורית UserService {NameService פרטי nameService; @ שירות שירות ציבורי אוטומטי (NameService nameService) {this.nameService = nameService; } מחרוזת getUserName ציבורית (מזהה מחרוזת) {return nameService.getUserName (id); }}

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

נצטרך גם מחלקה ראשית סטנדרטית של Spring Boot כדי לסרוק את השעועית ולאתחל את היישום:

@SpringBootApplication מחלקה ציבורית MocksApplication {public static void main (String [] args) {SpringApplication.run (MocksApplication.class, args); }}

3.2. המבחנים

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

@Profile ("test") @Configuration public class NameServiceTestConfiguration {@Bean @Primary NameService public nameService () {return Mockito.mock (NameService.class); }}

ה @פּרוֹפִיל ביאור אומר ל- Spring להחיל תצורה זו רק כאשר פרופיל "הבדיקה" פעיל. ה @יְסוֹדִי ההערה קיימת כדי לוודא שמופע זה משמש במקום חיוני אמיתי לחיווט אוטומטי. השיטה עצמה יוצרת ומחזירה לעג של מוקיטו שלנו שם שירות מעמד.

כעת נוכל לכתוב את מבחן היחידה:

@ActiveProfiles ("test") @RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (classes = MocksApplication.class) מחלקה ציבורית UserServiceUnitTest {@ שירות UserService פרטי פרטי; @ NameService פרטי פרטי מאושרים; @Test ציבורי בטל כאשר UserIdIsProvided_thenRetrievedNameIsCorrect () {Mockito.when (nameService.getUserName ("SomeId")). ואז החזר ("שם משתמש מדומה"); מחרוזת testName = userService.getUserName ("SomeId"); Assert.assertEquals ("שם משתמש מדומה", testName); }}

אנו משתמשים ב- @ActiveProfiles ביאור כדי לאפשר את פרופיל "הבדיקה" ולהפעיל את תצורת המדומה שכתבנו קודם. בגלל זה, האביב מחווט אוטומטית מופע אמיתי של שירות משתמש בכיתה, אבל לעג של שם שירות מעמד. המבחן עצמו הוא מבחן JUnit + Mockito אופייני למדי. אנו מגדירים את ההתנהגות הרצויה של הלעג, ואז קוראים לשיטה אותה אנו רוצים לבדוק וקובעים שהיא מחזירה את הערך המצופה.

אפשר גם (אם כי לא מומלץ) להימנע משימוש בפרופילי סביבה במבחנים כאלה. לשם כך, הסר את @Profile ו- @ ActiveProfiles הערות והוסף @ContextConfiguration (class = NameServiceTestConfiguration.class) ביאור ל UserServiceTest מעמד.

4. מסקנה

במדריך מהיר זה הראינו כמה קל להזריק לעגי מוקיטו לפולי אביב.

כרגיל, כל דגימות הקוד זמינות ב- GitHub.


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