7.1 คำอธิบายประกอบ @Suite

และคำอธิบายประกอบที่ใช้บ่อยอีกสองสามรายการ แม้ว่าคุณจะไม่ได้ใช้มัน แต่คุณจะได้เห็นการทดสอบกับพวกมันอย่างแน่นอน ดังนั้นจึงจำเป็นต้องเข้าใจอย่างน้อยในแง่ทั่วไปว่าเขียนอะไรไว้ที่นั่น

การทดสอบสามารถรวมกันเป็นกลุ่มได้ มีคำอธิบายประกอบพิเศษสำหรับสิ่ง@Suiteนี้ ตัวอย่าง:

@Suite
@SuiteDisplayName("JUnit Platform Suite Demo")
@SelectPackages("com.codegym.test")
@IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}

ในกรณีนี้ คำอธิบายประกอบ @Suite จะจับคู่กับคำอธิบายประกอบอื่นๆ

  • SuiteDisplayName– ตั้งชื่อของกลุ่มการทดสอบในบันทึก;
  • SelectPackages- ตั้งค่ารายการแพ็คเกจที่จะค้นหาคลาสทดสอบ
  • IncludeClassNamePatterns– กำหนดรูปแบบของชื่อคลาสการทดสอบ

ทำไมความยากลำบากเช่นนี้? ลองนึกภาพว่าการทดสอบทั้งหมดของโครงการดำเนินการ สมมติว่า 50 ชั่วโมง และการดำเนินการหลังจากการคอมมิตแต่ละครั้งนั้นมีราคาแพงมาก ในกรณีเช่นนี้ จะเป็นประโยชน์ในการสร้างสคริปต์ทดสอบแยกต่างหากและตั้งค่าการทดสอบด้วยวิธีที่ยืดหยุ่นกว่ามาก

7.2 คำอธิบายประกอบ @Order

คำอธิบายประกอบทั่วไปอีกอย่างหนึ่ง@TestMethodOrderคือ อนุญาตให้คุณระบุลำดับการเรียกใช้เมธอดการทดสอบในคลาสทดสอบ มันจะมีประโยชน์มากเมื่อคุณรู้ว่าการเรียกใช้เมธอดมีผลซึ่งกันและกัน แต่ในลำดับที่แน่นอน ทุกอย่างควรทำงานตามที่ควร ใช้ค่อนข้างบ่อย

ขั้นแรก คุณสามารถตั้งค่าวิธีการที่จะเรียกใช้ตามลำดับตัวอักษร :

@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {

}

ประการที่สอง แต่ละวิธีสามารถมีคำอธิบายประกอบพิเศษด้วยเลขลำดับของมัน

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

    @Test
    @Order(1)
    public void firstTest() {
    }

    @Test
    @Order(2)
    public void secondTest() {
    }
}

หรือแม้กระทั่งสร้างคลาสแยกต่างหากที่จะระบุลำดับที่เรียกการทดสอบ:

@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {

}

//sort method names alphabetically, but ignoring case
public class CustomOrder implements MethodOrderer {
    public void orderMethods(MethodOrdererContext context) {
        context.getMethodDescriptors().sort(
        (MethodDescriptor m1, MethodDescriptor m2)->
           m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
    }
}

7.3 คำอธิบายประกอบ @DisplayName

สุดท้าย การทดสอบแต่ละครั้งสามารถกำหนดชื่อได้ อาจสะดวกถ้ามีการทดสอบจำนวนมากและคุณสร้างสถานการณ์พิเศษ (ชุดย่อย) ของการทดสอบ มีคำอธิบายประกอบพิเศษสำหรับสิ่ง@DisplayNameนี้

ตัวอย่าง:

@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {

    @Test
    @DisplayName("Input Validation")
    void inputData() {
    }

    @DisplayName("Checking critical situations")
    @Test
    void criticalCases() {
    }
}

ในกรณีของการตั้งค่าลำดับของการทดสอบ คุณสามารถสร้างวิธีการพิเศษที่จะสร้างชื่อการทดสอบและวิธีการทดสอบได้ที่นี่ ตัวอย่าง:

@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {

    @Test
    void camelCaseName() {
    }

    static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
        @Override
        public String generateDisplayNameForClass(Class testClass) {
            return super.generateDisplayNameForClass(testClass).toUpperCase();
        }
 }
}

ดูว่ามันง่ายแค่ไหน :)