מעבר מ- JUnit 4 ל- JUnit 5

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

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

להנחיות הכלליות לשימוש ב- JUnit 5, עיין במאמר שלנו כאן.

2. יתרונות JUnit 5

נתחיל עם הגרסה הקודמת - ל- JUnit 4 יש מגבלות ברורות:

  • המסגרת כולה נכללה בספריית צנצנות אחת. יש לייבא את כל הספרייה גם כאשר נדרשת רק תכונה מסוימת. ב- JUnit 5 אנו מקבלים יותר פירוט ויכולים לייבא רק את הדרוש
  • רץ מבחן אחד יכול לבצע רק בדיקות ב- JUnit 4 בכל פעם (למשל. SpringJUnit4ClassRunner אוֹ פרמטרים ). JUnit 5 מאפשר לרצים מרובים לעבוד בו זמנית
  • JUnit 4 מעולם לא התקדם מעבר ל- Java 7, והחמיץ הרבה תכונות מ- Java 8. JUnit 5 עושה שימוש טוב בתכונות Java 8

הרעיון מאחורי JUnit 5 היה לשכתב לחלוטין את JUnit 4 כדי לפתור את רוב החסרונות הללו.

3. הבדלים

JUnit 4 חולק למודולים הכוללים את JUnit 5:

  • פלטפורמת JUnit - מודול זה סוקר את כל מסגרות ההרחבות שאולי אנו מעוניינים בביצוע, גילוי ודיווח על הבדיקה
  • JUnit Vintage - מודול זה מאפשר תאימות לאחור עם JUnit 4 או אפילו JUnit 3

3.1. ביאורים

JUnit 5 מגיע עם שינויים חשובים במסגרת ההערות שלו. החשוב ביותר הוא שאנחנו כבר לא יכולים להשתמש בו @מִבְחָן ביאור לציון ציפיות.

ה צָפוּי פרמטר ב- JUnit 4:

@Test (צפוי = Exception.class) בטל ציבורי צריךRaiseAnException () זורק Exception {// ...}

כעת אנו יכולים להשתמש בשיטה טוען זורק:

חלל ציבורי צריךRaiseAnException () זורק חריג {Assertions.assertThrows (Exception.class, () -> {// ...}); }

ה פסק זמן תכונה ב- JUnit 4:

@Test (פסק זמן = 1) בטל ציבורי shouldFailBecauseTimeout () זורק InterruptedException {Thread.sleep (10); }

עכשיו ה assertTimeout שיטה ב- JUnit 5:

@Test הציבורי בטל shouldFailBecauseTimeout () זורק InterruptedException {Assertions.assertTimeout (Duration.ofMillis (1), () -> Thread.sleep (10)); }

הערות אחרות ששונו בתוך יוני 5:

  • @לפני ההערה שונה לשם @ לפני כל אחד
  • @לאחר ההערה שונה לשם @אחרי כל אחד
  • @לפני השיעור ההערה שונה לשם @ לפני כל
  • @אחרי השיעור ההערה שונה לשם @אחרי הכל
  • @להתעלם ההערה שונה לשם @נָכֶה

3.2. קביעות

כעת אנו יכולים לכתוב הודעות קביעה במבדה ב- JUnit 5, מה שמאפשר להערכה העצלה לדלג על בניית מסרים מורכבת עד הצורך:

@Test public void shouldFailBecauseTheNumbersAreNotEqual_lazyEvaluation () {Assertions.assertTrue (2 == 3, () -> "מספרים" + 2 + "ו-" + 3 + "אינם שווים!"); }

אנו יכולים גם לקבץ קביעות ב- JUnit 5:

@Test ציבורי בטל shouldAssertAllTheGroup () {List list = Arrays.asList (1, 2, 4); Assertions.assertAll ("הרשימה אינה מצטברת", () -> Assertions.assertEquals (list.get (0) .intValue (), 1), () -> Assertions.assertEquals (list.get (1) .intValue ( ), 2), () -> Assertions.assertEquals (list.get (2) .intValue (), 3)); }

3.3. הנחות

החדש הנחות השיעור נמצא כעת org.junit.jupiter.api.Anisations. JUnit 5 תומך באופן מלא בשיטות ההנחות הקיימות ב- JUnit 4 ומוסיף קבוצה של שיטות חדשות כדי לאפשר הפעלת קביעות מסוימות רק בתרחישים ספציפיים בלבד:

@ מבחן ציבורי בטל כאשר סביבהIsWeb_thenUrlsShouldStartWithHttp () {assumingThat ("WEB" .equals (System.getenv ("ENV")), () -> {assertTrue ("http" .startsWith (address));}); }

3.4. תיוג וסינון

ב- JUnit 4 נוכל לקבץ מבחנים באמצעות ה- @קטגוריה ביאור. עם JUnit 5, ה- @קטגוריה ההערה מוחלפת ב- @תָג ביאור:

@Tag ("הערות") @Tag ("junit5") @RunWith (JUnitPlatform.class) בכיתה ציבורית AnnotationTestExampleTest {/*...*/}

אנו יכולים לכלול / לא לכלול תגים מסוימים באמצעות תוסף maven-surefire:

   maven-surefire-plugin junit5 

3.5. הערות חדשות למבחני ריצה

ה @לרוץ עם שימש לשילוב הקשר ההבדל עם מסגרות אחרות או לשינוי זרימת הביצוע הכוללת במקרי הבדיקה ב- JUnit 4.

עם JUnit 5, כעת אנו יכולים להשתמש ב- @ExtendWith ביאור לספק פונקציונליות דומה.

כדוגמה, לשימוש בתכונות האביב ב- JUnit 4:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration ({"/app-config.xml", "/test-data-access-config.xml"}) כיתה ציבורית SpringExtensionTest {/*...*/}

עכשיו, ב- JUnit 5 זו סיומת פשוטה:

@ExtendWith (SpringExtension.class) @ContextConfiguration ({"/app-config.xml", "/test-data-access-config.xml"}) SpringExtensionTest הציבורית בכיתה ציבורית {/*...*/} 

3.6. הערות על כללי בדיקה חדשים

ב- JUnit 4, @כְּלָל ו- @ClassRule הערות שימשו כדי להוסיף פונקציונליות מיוחדת למבחנים.

ב- JUnit 5. אנו יכולים לשחזר את אותו ההיגיון באמצעות ה- @ExtendWith ביאור.

לדוגמה, נניח שיש לנו כלל מותאם אישית ב- JUnit 4 לכתוב עקבות יומן לפני ואחרי בדיקה:

מחלקה ציבורית TraceUnitTestRule מיישמת את TestRule {@Override הצהרה ציבורית חלה (בסיס הצהרה, תיאור תיאור) {החזר הצהרה חדשה () {@Override public void evalu () זורק Throwable {// לפני ואחרי הערכת מעקב כאן ...}} }}

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

@Rule ציבורי TraceUnitTestRule traceRuleTests = TraceUnitTestRule חדש (); 

ב- JUnit 5 נוכל לכתוב את אותו הדבר בצורה הרבה יותר אינטואיטיבית:

מחלקה ציבורית TraceUnitExtension מיישמת AfterEachCallback, BeforeEachCallback {@Override public void eachEach (TestExtensionContext context) זורק חריג {// ...} @Override public void afterEach (TestExtensionContext context) זורק חריג {// ...}}

שימוש ב- JUnit 5 AfterEachCallback ו BeforeEachCallback ממשקים זמינים בחבילה org.junit.jupiter.api.extension, אנו מיישמים כלל זה בקלות בחבילת הבדיקה:

@RunWith (JUnitPlatform.class) @ExtendWith (TraceUnitExtension.class) מחלקה ציבורית RuleExampleTest {@Test public בטל whenTracingTests () {/*...*/}}

3.7. JUnit 5 בציר

JUnit Vintage מסייע בהעברת מבחני JUnit על ידי הפעלת מבחני JUnit 3 או JUnit 4 בהקשר JUnit 5.

אנו יכולים להשתמש בו על ידי ייבוא ​​מנוע JUnit Vintage:

 org.junit.vintage junit-vintage-engine $ {junit5.vintage.version} מבחן 

4. מסקנה

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

ניתן למצוא את היישום המלא של מדריך זה ב- GitHub.


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