7.1 @Suite notu

Ve birkaç tane daha sık kullanılan açıklama. Onları kullanmasanız bile, onlarla kesinlikle testler göreceksiniz. Bu nedenle, orada yazılanları en azından genel hatlarıyla anlamak gerekir.

Testler gruplar halinde birleştirilebilir. Bunun için özel bir açıklama var @Suite. Örnek:

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

Bu durumda, @Suite ek açıklaması diğer ek açıklamalarla eşleştirilir.

  • SuiteDisplayName– günlükteki test grubunun adını ayarlar;
  • SelectPackages- test sınıflarının aranacağı paketlerin listesini ayarlar;
  • IncludeClassNamePatterns– test sınıfı adlarının modelini ayarlar.

Neden bu tür zorluklar? Pekala, projenin tüm testlerinin 50 saat diyelim. Ve her taahhütten sonra bunları yürütmek çok pahalıdır. Böyle bir durumda, bazı ayrı test komut dosyaları oluşturmak ve testi çok daha esnek bir şekilde ayarlamak yararlıdır.

7.2 @Sipariş notu

Diğer bir yaygın ek açıklama @TestMethodOrder. Test sınıfında test yöntemlerinin çağrıldığı sırayı belirlemenizi sağlar. Yöntem çağrılarının birbirini etkilediğini, ancak belirli bir sırayla her şeyin olması gerektiği gibi çalışması gerektiğini bildiğinizde çok yararlı olabilir. Oldukça sık kullanılır.

Öncelikle, çağrılacak yöntemleri alfabetik sırayla ayarlayabilirsiniz :

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

}

İkinci olarak, her yöntemin sıra numarası ile özel bir notu olabilir.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Veya testlerin çağrıldığı sırayı belirten ayrı bir sınıf bile oluşturun:

@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 notu

Son olarak, her teste bir ad verilebilir. Çok sayıda test olması ve testlerin özel senaryolarını (altkümeleri) oluşturmanız uygun olabilir. Bunun için özel bir açıklama var @DisplayName.

Örnek:

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

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

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

Testlerin sırasını ayarlama durumunda olduğu gibi, burada testlerin ve test yöntemlerinin adlarını oluşturacak özel bir yöntem oluşturabilirsiniz. Örnek:

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

Bakın ne kadar kolay :)