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();
}
}
}
얼마나 쉬운지 보세요 :)
GO TO FULL VERSION