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

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

JUnit 5 מספק גישה יעילה יותר לבעיה זו: הזרקת תלות (DI).

מהי הזרקת תלות?

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

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

DI מאפשר לך להשתמש באובייקט במחלקה תלויה, מבלי ליצור מופע חדש שלו באותה מחלקה.

הזרקת תלות ב-JUnit 5

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

instagram viewer

JUnit 5 מאפשר לך להזריק כמה פרמטרים שתרצה. הקאץ' היחיד הוא שה-API של ParameterResolver חייב להיות מסוגל לפתור כל פרמטר בזמן ריצה. ל-JUnit יש כרגע שלושה פותרי פרמטרים מובנים שבהם היא משתמשת באופן אוטומטי. כדי להשתמש בכל פותר אחר, תצטרך לרשום אותו במפורש באמצעות ההערה @ExtendWith.

הזרקת תלות ב-JUnit

תוכנית לדוגמה זו משתמשת באחד מהפרמטרים המובנים של JUnit (ה-TestInfoParameterResolver), כדי להדגים כיצד ניתן להחדיר תלות לתוך מבחן JUnit 5. TestInfoParameterResolver פותר אובייקטים השייכים לממשק TestInfo. לכן, JUnit 5 יספק מופע של ממשק TestInfo לכל שיטה או בנאי שמשתמשים בו.

יְבוּאסטָטִי org.junit.jupiter.api. קביעות.*;
יְבוּא org.junit.jupiter.api. הצג שם;
יְבוּא org.junit.jupiter.api. מִבְחָן;
יְבוּא org.junit.jupiter.api. TestInfo;

מעמדInfoTestInterfaceTest{
// הזרקת אובייקט testInfo לבנאי InfoTestInterfaceTest
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}

// הזרקת אובייקט testInfo לשיטות
@מִבְחָן
בָּטֵלtestMethodName(TestInfo testInfo){
assertEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}

@מִבְחָן
@הצג שם("שיטה המשתמשת ב- @הצג שם הערה")
בָּטֵלtestMethodNameTwo(TestInfo testInfo){
assertEquals("שיטה המשתמשת ב- @הצג שם annotation", testInfo.getDisplayName());
}
}

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

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

מחלקת הבדיקה למעלה מייצרת את דוח הבדיקה הבא:

השתמש ב-DI בשיטות @Before ו-@After

ישנם ארבעה סוגים נוספים של שיטות מוערות של JUnit התומכות בתלות. אלו הן ההערות @BeforeAll, @BeforeEach, @AfterAll ו-@AfterEach. כמו שיטת @Test, כל מה שאתה צריך לעשות הוא להעביר אובייקט לכל אחת מהשיטות לפני או אחרי כפרמטר, ואתה מוכן.

ההערות @Before ו-@After חשובות, מכיוון שהן גם עוזרות לך לפתח קוד בדיקה יעיל יותר. היכולת להחדיר גם תלות לשיטות אלו תשפר עוד יותר את קוד הבדיקה שלך.