כיצד להשתמש בהערות @Before ו-@After ב-JUnit

כיצד להשתמש בהערות @Before ו-@After ב-JUnit

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





כיצד להשיג שירות אינטרנט זמני
איפור של סרטון היום

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





ההערה @BeforeAll

מחלקת בדיקה JUnit יכולה לכלול שיטת בדיקה אחת או יותר. ההערה @BeforeAll מסמנת שמתודה ספציפית צריכה להתבצע לפני כל שיטות הבדיקה במחלקת בדיקה. השיטה המשויכת להערה זו מופעלת פעם אחת בלבד (בתחילת הבדיקה) ללא קשר למספר שיטות הבדיקה במחלקת הבדיקה.





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

כיתת המחשבון

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

כיתת מבחן מחשבון

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

במחלקה זו, ההערה @BeforeAll פועלת עם שיטת powerOnCalculator() אשר מדפיסה את 'המחשבון פועל' לפני כל הפעלת בדיקה. ביצוע הבדיקה המוצלח מדפיס את דוח הבדיקה הבא:



  דוח הערות לפני הכל

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

הערת @BeforeEach

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





import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

הוספת ההערה @BeforeEach למחלקה CalculatorTest מייצרת את הפלט הבא:

  לפני כל הערה פלט

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





ההערה @AfterAll

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

@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

הוספת השיטה המוערת @AfterAll למחלקה הקיימת CalculatorTest מדפיסה את הפלט הבא למסוף:

איך מזווגים איירפודים לאנדרואיד
  פלט הערות AfterAll

שים לב שהשיטה powerOffCalculator() המשתמשת בביאור @AfterAll, מדפיסה בסוף מחלקת הבדיקה, לאחר ביצוע כל שיטות הבדיקה.

ההערה @AfterEach

ההערה @AfterEach היא המקבילה להערת @BeforeEach. יש להם אותן תנאי חובה, שהם מעט שונים מאלה של ההערות @BeforeAll ו-@AfterAll. מה שמבדיל את ההערה @AfterEach מהביאור @BeforeEach (מלבד שמותיהם) הוא ששיטת @AfterEach פועלת לאחר כל שיטת בדיקה.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

ביצוע מחלקת CalculatorTest מדפיס את הפלט הבא למסוף:

  פלט לאחר כל הערה

הפלט מראה שהשיטה הקשורה להערת @AfterEach (returnResults) מודפסת ארבע פעמים. כל ביצוע של שיטת returnResults() מתרחשת רק לאחר ביצוע כל מבחן יחידה. הדבר ניכר בעובדה שהפלט של שיטת returnResults() מופיע אחרי כל פלט מהשיטה המשויכת לביאור @BeforeEach.

צחצח את סוויטות הבדיקה שלך באמצעות הערות

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

שתי דוגמאות הקוד שמציגות את מחלקת CalculatorTest המלאה משתמשות בהערת @DisplayName. ההערה @DisplayName עוזרת לך ליצור שמות משמעותיים יותר עבור שיעורי המבחן ושיטות המבחן שלך.