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

얼마나 쉬운지 보세요 :)