סדר הבדיקות ב- JUnit

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

כברירת מחדל, JUnit מריץ בדיקות תוך שימוש בסדר דטרמיניסטי, אך בלתי צפוי (MethodSorters.DEFAULT).

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

2. צו מבחן ב- JUnit 5

ביוניט 5, אנחנו יכולים להשתמש @TestMethodOrder לשלוט בסדר הביצוע של הבדיקות.

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

  1. @להזמין ביאור
  2. אותיות ומספרים להזמין
  3. סדר אקראי

2.1. משתמש ב @להזמין ביאור

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

בדוגמה הבאה, השיטות יפעלו בסדר זה - firstTest (), לאחר מכן מבחן שני (), ולבסוף, מבחן שלישי ():

@TestMethodOrder (OrderAnnotation.class) מחלקה ציבורית OrderAnnotationUnitTest {פלט StringBuilder סטטי פרטי = StringBuilder חדש (""); @Test @ הזמנה (1) מבטל פומבי firstTest () {output.append ("a"); } @Test @Order (2) מבט פומבי secondTest () {output.append ("b"); } @Test @Order (3) מבט פומבי thirdTest () {output.append ("c"); } @ AfterAll public static void assertOutput () {assertEquals (output.toString (), "abc"); }}

2.2. באמצעות אותיות ומספרים להזמין

אנו יכולים גם להריץ בדיקות על סמך שמותיהם בסדר אלפאנומרי:

@TestMethodOrder (Alphanumeric.class) מחלקה ציבורית AlphanumericOrderUnitTest {פלט סטטי StringBuilder סטטי פרטי = StringBuilder חדש (""); @Test הציבור בטל myATest () {output.append ("A"); } @Test הציבור בטל myBTest () {output.append ("B"); } @Test ציבורי בטל myaTest () {output.append ("a"); } @ AfterAll public static void assertOutput () {assertEquals (output.toString (), "ABa"); }}

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

המבחנים יפעלו בסדר הבא: myATest (), myBTest () ולבסוף myaTest ().

2.3. באמצעות הזמנה מותאמת אישית

סוף כל סוף, אנו יכולים להשתמש בסדר המותאם אישית שלנו על ידי יישום ה- הזמנת שיטה מִמְשָׁק.

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

מחלקה ציבורית CustomOrder מיישמת את MethodOrderer {@Override public void orderMethods (MethodOrdererContext context) {context.getMethodDescriptors (). sort ((MethodDescriptor m1, MethodDescriptor m2) -> m1.getMethod (). getName (). CompareToIgnoreCase (m2.getMod) .getName ())); }}

ואז נשתמש הזמנה מותאמת אישית להריץ את אותן הבדיקות מהדוגמה הקודמת שלנו בסדר זה - myATest (), myaTest (), ולבסוף, myBTest ():

@TestMethodOrder (CustomOrder.class) מחלקה ציבורית CustomOrderUnitTest {// ... @AfterAll public static void assertOutput () {assertEquals (output.toString (), "AaB"); }}

3. צו בדיקה ב- JUnit 4

אם אתה עדיין משתמש ב- JUnit 4, ממשקי ה- API לבדיקת הזמנות שונים במקצת.

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

3.1. באמצעות MethodSorters.DEFAULT

אסטרטגיית ברירת מחדל זו משווה שיטות בדיקה המשתמשות בקודי ה- hash שלהן. במקרה של התנגשות חשיש, נעשה שימוש בסדר הלקסיקוגרפי:

@FixMethodOrder (MethodSorters.DEFAULT) מחלקה ציבורית DefaultOrderOfExecutionTest {פלט StringBuilder סטטי פרטי = חדש StringBuilder (""); @Test ציבורי בטל secondTest () {output.append ("b"); } @Test ציבורי בטל thirdTest () {output.append ("c"); } @Test ציבורי בטל firstTest () {output.append ("a"); } @ AfterClass ציבור סטטי ריק בטל assertOutput () {assertEquals (output.toString (), "cab"); }}

כשנבצע את המבחנים בכיתה לעיל, נראה שכולם עוברים, כולל assertOutput ().

3.2. באמצעות MethodSorters.JVM

אסטרטגיית הזמנה נוספת היא MethodSorters.JVMאסטרטגיה זו משתמשת בהזמנת JVM הטבעית - שיכולה להיות שונה לכל ריצה:

@FixMethodOrder (MethodSorters.JVM) מחלקה ציבורית JVMOrderOfExecutionTest {// זהה לעיל}

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

3.3. באמצעות MethodSorters.NAME_ASCENDING

לבסוף, ניתן להשתמש באסטרטגיה זו לצורך בדיקת הריצה בסדר הלקסיקוגרפי שלהם:

@FixMethodOrder (MethodSorters.NAME_ASCENDING) מחלקה ציבורית NameAscendingOrderOfExecutionTest {// זהה לעיל @ AfterClass ציבור סטטי ריק ריק assOutput () {assertEquals (output.toString (), "abc"); }}

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

4. מסקנה

במדריך מהיר זה עברנו את הדרכים לקביעת סדר הביצוע הקיים ב- JUnit.

וכמו תמיד, ניתן למצוא את הדוגמאות המשמשות במאמר זה ב- GitHub.


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