JUnit 5 הוא מסגרת לבדוק תוכנה שמשתמשים בה מפתחים לביצוע בדיקות יחידה על הקוד שלהם. זו מסגרת מבוססת Java שמאפשרת כתיבה והרצה של בדיקות על פלטפורמת ה-Java, כולל דיווח משולב שמציג את תוצאות הבדיקות.
JUnit יכולה לשמש לבדיקה אוטומטית לשני מטרות עיקריות:
- לבדוק שהתוכנה פועלת כפי שצפוי שהיא תפעל
- לאתר ולדווח על שגיאות בקוד ולתקן אותן במהירות האפשרית
בבלוג הזה, נתמקד ונלמד על ההגדרה, הקונפיגורציה והשיטות הבסיסיות שנמצאות בשימוש ב-JUnit 5.
מה זה JUnit 5?
JUnit 5 היא הגרסה האחרונה של מסגרת הבדיקות JUnit. היא תומכת ב-Java 8 ומעלה, מתאימה לסגנונות בדיקה שונים ומציעה בסיס מודרני לבדיקה בצד המפתח על ה-JVM.
היתרון העיקרי בשימוש ב-JUnit הוא המודולריות שלה, מכיוון שהיא מכילה מספר מודולים שמאפשרים למפתחים לבדוק בקלות רכיבים שונים של התוכנה. ניתן גם להשתמש בה כדי לבדוק מחלקות בודדות של היישום במקום את כל היישום.
תכונות של JUnit 5
להלן כמה מהתכונות הפופולריות והחשובות של JUnit 5 שמבדילות אותה ממסגרות בדיקות יחידה אחרות.
Feature | Description | Annotations/Method |
---|---|---|
סטי בדיקות |
סטי בדיקות הם בעצם קבוצת בדיקות, כמו Smoke, Sanity, או קבוצת בדיקות הקשורות לתכונה מסוימת. JUnit 5 מאפשר יצירת סטי בדיקות שניתן להריץ יחד. |
כדי להשתמש בסטי בדיקות, אנו צריכים להוסיף תלות של JUnit Platform Suite ולהשתמש באנוטציות הבאות.@SelectPackages ,@SelectClasses , @Suite |
הצהרות | ההצהרות משמשות כדי לאמת את התנהגות התוכנה הצפויה. JUnit 5 מספקת שיטות הצהרה מובנות שיכולות לסייע בביצוע ההצהרות בקלות. | ישנן מספר שיטות הצהרה זמינות בimport org.junit.jupiter.api.Assertions; כיתה.כמה מהשיטות מופיעות למטה: assertTrue() , assertFalse() ,assertEquals() , assertAll() , assertNotEquals() |
סדר הרצת הבדיקות | מתאים את סדר הרצת הבדיקות. זה מאפשר למפתח לשלוט על הרצת הבדיקות ולהריץ את הבדיקות בסדר ספציפי לפי הצורך. | @TestMethodOrder , @Order ,@TestClassOrder |
בדיקת חריגות | מבצעת בדיקת חריגות שמאשרת כי החריגה הנדרשת מושלכת לבדיקה. | שיטה הבאה מהimport org.junit.jupiter.api.Assertions; משמשת: assertThrows() |
תלותי בדיקות | תלותי בדיקות מאפשרים בדיקה מסודרת על ידי מתן האפשרות לשיטות הבדיקה להיות תלויות זו בזו. זה אומר שהשיטה הבדיקה הבאה, שתלויה בשיטת הבדיקה הקודמת, לא תופעל עד שהקודמת עוברת. זהו תכונה מועילה בעת כתיבת בדיקות אינטגרציה. | @TestInstance |
ניטרול בדיקות | מנטרל בדיקות או מחלקות בדיקה. | @Disabled |
פסקי זמן | מכשיל בדיקה אם זמן הביצוע שלה חורג מזמן מסוים. | @Timeout |
דוחות | מספק דיווח מובנה לניתוח תוצאות הבדיקה ומציג מידע מפורט. יוצר קובץ .html עם תוצאות ביצוע הבדיקות. |
לא רלוונטי |
JUnit 4 נגד JUnit 5
עם שחרור גרסה האחרונה של JUnit, כלומר JUnit 5, נוספו שינויים רבים ותכונות חדשות למסגרת. ההבדלים בין שתי הגרסאות מופיעים בטבלה למטה:
criteria | JUNIT4 | JUNIT5 |
---|---|---|
ארכיטקטורה | הכל היה מארוז ביחד בקובץ JAR אחד. | Divided into 3 sub-projects: – JUnit Platform – JUnit Jupiter – JUnit Vintage |
JDK Version Requirement | זקוק ל-Java 5 או גרסה גבוהה יותר | זקוק ל-Java 8 או גרסה גבוהה יותר |
שילוב צד שלישי | אין תמיכה בשילוב שלישי לתוספים וסביבות פיתוח משולבות | תת-פרוייקט מיועד (JUnit Platform) לשילובים של צד שלישי |
תמיכה בבדיקות מקוננות | אין הערכת תגים לכתיבת בדיקות מקוננות | מספק הערכת @Nested לכתיבת בדיקות מקוננות |
תמיכה בהרשמת הרחבות מותאמות אישית | אין תמיכה בהרחבות מותאמות אישית | מספק הערכת @ExtendWith להרשמת הרחבות מותאמות אישית |
שינויים בהערכות הנפוצות | – @BeforeClass – @AfterClass – @Before – @After – @Ignore |
– @BeforeAll – @AfterAll – @BeforeEach – @AfterEach – @Disabled |
שינויים בהערכות להעברת תגים וסינון | השתמש בהערכת @Category |
השתמש בהערכת @Tag |
איחודי בדיקות | השתמש בהערכות @RunWith ו-@Suite |
@סוויט , @בחרחבילות , ו- @בחרמחלקות הן האנוטציות שמשמשות |
התחלה עם JUnit 5
בסעיף זה, נלמד איך לכתוב מבחני JUnit 5 באמצעות סביבת הפיתוח IntelliJ IDE. מכיוון שהוא כבר מגיע מוכן עם JUnit 5, אין צורך לבצע התקנה נוספת על מנת להשתמש בו.
יש ליצור פרויקט Maven חדש, להוסיף את תלותי JUnit 5, ולהתחיל לכתוב את המבחנים מיידית.
הוספת תלותי JUnit בפרויקט Maven
התלות הבאות של JUnit 5 צריכות להיתווסף בקובץ pom.xml:
- מנוע JUnit Jupiter
- API JUnit Jupiter
- סוויטת הפלטפורמה של JUnit
- פרמטרים של JUnit Jupiter
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
זהו הקובץ המלא של pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.mfaisalkhatri</groupId>
<artifactId>junit-basic</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>junit-basic</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
לאחר הוספת התלות, אנו מוכנים לכתוב את המבחן. אך, לפני שנמשיך לכתוב את המבחנים באמצעות JUnit 5, בואו נבין תחילה את האנוטציות הבסיסיות שיכולות לעזור לנו להגדיר את הסביבה לבדיקות ולהריץ אותן כפי שרצוננו.
אנוטציות בסיסיות המשמשות ב-JUnit 5
הנה רשימת האנוטציות הבסיסיות שנהוגות ביותר בקרב מפתחים בעת כתיבת הבדיקות באמצעות JUnit 5.
@BeforeAll אנוטציה
האינדיקציה @BeforeAll
מציינת כי השיטה שמסומנת צריכה להתבצע לפני כל שיטת @Test
, @RepeatedTest
, @ParameterizedTest
, או @TestFactory
במחלקה הנוכחית. עליה להיות שיטה סטטית במחלקת המבחן.
@BeforeAll
משמש כהחלפה להערכת @BeforeClass
המשמשת ב-JUnit 4.x
תחביר:
public class BasicTest {
public static void beforeAllTest() {
System.out.println("Before All method called!!");
}
//..
}
ההערה @BeforeEach
ההערה @BeforeEach
מציינת כי השיטה שמסומנת צריכה להתבצע לפני כל קריאה לשיטת @Test
, @RepeatedTest
, @ParameterizedTest
, או @TestFactory
במחלקה הנוכחית.
היא חלק משיטות מחזור החיים של הבדיקה ומחליפה את ההערה @Before
המשמשת ב-JUnit 4.
תחביר:
public class BasicTest {
public void beforeEachTest() {
System.out.println("Before Each method called!!");
}
//...
}
ההערה @AfterAll
ההערה @AfterAll
מציינת כי השיטה שמסומנת צריכה להתבצע לאחר סיום כל הבדיקות במחלקה הנוכחית. עליה להיות שיטה סטטית ולשמש כשיטת סיום במחלקת הבדיקה.
ההערה @AfterAll
היא ההחלפה של ההערה @AfterClass
ב-JUnit 4.
תחביר:
public class BasicTest {
//...
public static void afterAllMethod() {
System.out.println("After All method called!!");
}
}
ההערה @AfterEach
ההערה @AfterEach
מציינת כי השיטה שמסומנת צריכה להתבצע לאחר כל שיטת @Test
, @RepeatedTest
, @ParameterizedTest
, או @TestFactory
במחלקה הנוכחית.
זה משמש כהחלפה ל-JUnit 5 עבור ההערה @After
המשמשת ב-JUnit 4.
תחביר:
public class BasicTest {
//...
public void afterEachMethod() {
System.out.println("After Each method called!!");
}
}
ההערה @Test
ההערה @Test
מציינת כי השיטה שמסומנת היא שיטת בדיקה. השיטת בדיקה לא יכולה להיות פרטית או סטטית ולא להחזיר ערך.
תחביר:
public class BasicTest {
//..
public void testMethod() {
System.out.println("Test Method Called!!");
}
}
ההערה @DisplayName
ההערה @DisplayName
משמשת לציין שם מותאם אישית עבור מחלקת הבדיקה או השיטה שמסומנת. שמות אלה יכולים לכלול רווחים, תווים מיוחדים ואפילו אמוג'ים ובדרך כלל משמשים בדוחות הבדיקה שנוצרים על ידי סביבות פיתוח וכלי בנייה.
תחביר:
"Demo Test class") (
public class BasicTest {
//...
"This is a demo test") (
public void testMethod() {
System.out.println("Test Method Called!!");
}
}
ההערה @Disabled
ההערה @Disabled
ב-JUnit 5 משמשת לאילוץ של שיטת הבדיקה או מחלקת הבדיקה ממבנה הבדיקה לביצוע.
כאשר מיושמת על מחלקת בדיקה, כל השיטות בתוך מחלקת הבדיקה מתווספות כבלתי פעילות באופן אוטומטי. ההערה מכילה פרמטר אופציונלי שמאפשר לציין את הסיבה לנטרול הבדיקה.
תחביר:
public class BasicTest {
"Test method disabled") (
public void testMethod() {
System.out.println("Test Method Called!!");
}
//...
}
כיצד לכתוב מבחני בדיקה אוטומטיים באמצעות JUnit 5
הגיע הזמן לחדור אל הקוד ולהתחיל לעבוד עם JUnit 5. ניצור מחלקת Java חדשה, BasicTest.
public class BasicTest {
//..
}

כל ההערות הבסיסיות שדנו בהן ייכסו כחלק מהדגמה.
בואו נוסיף שיטות במחלקת BasicTest כדי להדגים את שימוש באננוטציות @BeforeAll
, @BeforeEach
, @AfterAll
, @AfterEach
, @Test
, @DisplayName
ו-@Disabled
הזמינות ב-JUnit 5.
"Demo Test class") (
public class BasicTest {
public static void beforeAllTest() {
System.out.println("Before All method called!!");
}
public void beforeEachTest() {
System.out.println("Before Each method called!!");
}
"This is a demo test") (
public void testMethodOne() {
System.out.println("Test Method One Called!!");
}
"This test is disabled to demo disable annotation") (
public void disabledTest() {
System.out.println("This is a disabled test!!");
}
public void testMethodTwo() {
System.out.println("Test Method Two Called!!");
}
public void afterEachMethod() {
System.out.println("After Each method called!!");
}
public static void afterAllMethod() {
System.out.println("After All method called!!");
}
}
ראיון בקוד
האננוטציה @DisplayName
מעל מחלקת הבדיקות תציג את שם הבדיקה כ- "Demo test class" בתוצאות כאשר הבדיקה מבוצעת.
השיטה beforeAllTest()
תופעל לפני ריצת כל אחת מהבדיקות ותדפיס את הטקסט "Before All method Called!!"
. לאחר מכן, השיטה beforeEachTest()
תופעלת לפני כל בדיקה ותדפיס את הטקסט "Before Each Method called!!"
.
יש שלוש שיטות בדיקה במחלקה זו, בשמות testMethodOne()
, testMethodTwo()
ו-disabledTest()
. כל שלושת השיטות בדיקה מכילות את האננוטציה @Test annotation
שמציינת שמדובר בשיטות בדיקה.
השיטה disabledTest()
לא תופעל מכיוון שיש לה את האננוטציה @Disabled
מעליה.
לאחר שהרצת הבדיקה הושלמה, השיטה afterEachTestMethod()
תופעלה מכיוון שיש לה את האננוטציה @AfterEach
מעליה.
לבסוף, לאחר ריצת כל הבדיקות, השיטה afterAllMethod()
תופעל מכיוון שיש לה את האננוטציה @AfterAll
מעליה.
בדיקת ביצוע
ניתן להריץ את הבדיקות על ידי לחיצה ימנית על מחלקת הבדיקה ובחירת הרצה 'שם מחלקת הבדיקה'("BasicTest" במקרה שלנו).

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

תמונת המסך הבאה מתוך IntelliJ IDE מראה כי הבדיקות הופעלו בהצלחה.

ניתן לראות בתמונת המסך למעלה כי שם התצוגה של מחלקת הבדיקה הודפס, גם ניתן לראות את הבדיקה שנוטלה והסיבה לביטול הבדיקה מוצגת בקונסולה.
כל שאר שיטות הבדיקה, כולל beforetest ו- aftertest, הופעלו בהצלחה, והתוצאות המתאימות הודפסו בקונסולה.
סיכום
JUnit 5 הוא מרכז בדיקות עוצמתי המשמש על ידי מפתחים לביצוע בדיקת יחידות של הקוד. הוא משמש גם על ידי מהנדסי אוטומציה לכתיבה והרצת תסריטי אוטומציה לבדיקות. יש לו תכונות עשירות שמאפשרות למפתחים ולבדיקאים לכתוב תסריטי בדיקה ולבצע בדיקת יחידות של הקוד.
הוא גם מספק מספר שיטות לביצוע אסרטים ווידואים שמועילות בעת כתיבת בדיקות ממוכנות. בנוסף לכתיבת והרצת תסריטי בדיקה, הוא גם מספק דוח בדיקה שניתן להשתמש בו כדי להדגים את תוצאות ביצוע הבדיקות לצדדים נוספים ולהדגים את כיסוי הבדיקות.
שמח בבדיקה!
Source:
https://dzone.com/articles/beginners-guide-to-junit-5