7.1 Anotasi @Suite

Dan beberapa anotasi yang lebih kerap digunakan. Walaupun anda tidak menggunakannya, anda pasti akan melihat ujian dengan mereka. Oleh itu, adalah perlu untuk memahami sekurang-kurangnya secara umum apa yang tertulis di sana.

Ujian boleh digabungkan ke dalam kumpulan. Terdapat anotasi khas untuk ini @Suite. Contoh:

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

Dalam kes ini, anotasi @Suite digandingkan dengan anotasi lain.

  • SuiteDisplayName– menetapkan nama kumpulan ujian dalam log;
  • SelectPackages- menetapkan senarai pakej untuk mencari kelas ujian;
  • IncludeClassNamePatterns– menetapkan corak nama kelas ujian.

Mengapa kesukaran sedemikian? Bayangkan semua ujian projek itu dilaksanakan, katakan, 50 jam. Dan untuk melaksanakannya selepas setiap komit adalah sangat mahal. Dalam kes sedemikian, adalah berguna untuk mencipta beberapa skrip ujian berasingan dan menyediakan ujian dengan cara yang lebih fleksibel.

7.2 @Anotasi pesanan

Satu lagi anotasi biasa ialah @TestMethodOrder. Ia membolehkan anda menentukan susunan kaedah ujian dipanggil dalam kelas ujian. Ia boleh menjadi sangat berguna apabila anda mengetahui bahawa panggilan kaedah mempengaruhi satu sama lain, tetapi dalam susunan tertentu, semuanya harus berfungsi sebagaimana mestinya. Digunakan agak kerap.

Pertama, anda boleh menetapkan kaedah untuk dipanggil dalam susunan abjad :

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

}

Kedua, setiap kaedah boleh mempunyai anotasi khas dengan nombor ordinalnya.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Atau buat kelas berasingan yang akan menentukan susunan ujian dipanggil:

@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 anotasi @DisplayName

Akhir sekali, setiap ujian boleh diberi nama. Ia boleh menjadi mudah jika terdapat banyak ujian dan anda mencipta senario khas (subset) ujian. Terdapat anotasi khas untuk ini @DisplayName.

Contoh:

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

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

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

Seperti dalam kes menetapkan susunan ujian, di sini anda boleh mencipta kaedah khas yang akan menjana nama ujian dan kaedah ujian. Contoh:

@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();
        }
 }
}

Lihat betapa mudahnya :)