4.1 @비활성화
이제 JUnit 프레임워크의 매우 유용하고 인기 있는 몇 가지 주석을 살펴보겠습니다. 첫 번째 주석을 사용하면 JUnit이 호출하지 않도록 특정 테스트를 끌 수 있습니다. 테스트가 제대로 작동하지 않거나 코드를 변경하여 테스트가 실수로 중단되는 경우에 필요합니다.
이전에 쓴 것처럼 테스트의 99%는 누구에게도 지원되지 않으므로 조만간 모두 비활성화됩니다. 따라서 이 주석은 유용한 주석 목록의 첫 번째입니다.
그녀의 예를 고려하십시오.
public class AppTest {
@Disabled("Test is temporarily disabled. True, true")
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
위의 예에서는 메서드가 testOnDev()
호출되지 않습니다. 그건 그렇고, @Disabled
클래스 선언 바로 전에 주석을 작성할 수 있으며 모든 메서드는 무시됩니다.
@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
4.2 @중첩
JUnit을 사용하면 중첩 클래스에서 테스트 메서드를 호출할 수 있습니다. 내포된 테스트 클래스를 의미합니다. 자주 접하게 될 것이라는 사실은 아니지만 그러한 가능성이 있으므로 그것이 무엇인지 이해해야합니다.
선언 전에 중첩 클래스의 메서드를 호출하려면 주석을 작성해야 합니다 @Nested
. 예:
public class AppTest {
@Nested
public class DevStagingEnvironment {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
@Nested
public class ProductionEnvironment {
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
}
자세한 내용은 공식 문서 에서 확인할 수 있습니다 .
4.3 @ExtendWith
또 다른 유용한 주석은 입니다 @ExtendWith
. 아마도 당신은 그녀를 매우 자주 만날 것이므로 그녀를 더 자세히 살펴 보겠습니다.
JUnit은 작업의 유연한 사용자 정의를 위해 다양한 플러그인(확장)을 작성할 수 있는 강력한 프레임워크입니다. 일부 확장 프로그램은 테스트에 대한 통계를 수집할 수 있고, 다른 확장 프로그램은 메모리 내 파일 시스템을 에뮬레이션할 수 있으며, 다른 확장 프로그램은 웹 서버 내부 작업을 에뮬레이션할 수 있습니다.
코드가 프레임워크(예: Spring) 내에서 실행 중인 경우 거의 항상 이 프레임워크가 코드의 객체 생성 및 구성을 관리합니다 . 따라서 특별한 테스트 플러그인이 반드시 필요합니다. 예:
예제 1. 확장이 올바르게 작동하기 위해 WebServerExtension
호출된 테스트 메서드로 전달됩니다 .URL
@Test
@ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
WebClient webClient = new WebClient();
// Use WebClient to connect to web server using serverUrl and verify response
assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}
이것은 테스트가 일반적으로 Spring 프레임워크와 함께 작동하는 코드를 테스트하기 시작하는 방법입니다.
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
Spring 프레임워크의 테스트 버전을 생성하지만 MockitoExtention
가짜 객체를 생성할 수 있습니다. 가짜 개체는 매우 흥미로운 주제이므로 확실히 다룰 것이지만 조금 후에 다룰 것입니다.
4.4 @타임아웃
소소하고 재미있는 주석으로 이 강의를 마치겠습니다 @Timeout
. 테스트를 실행할 시간을 설정할 수 있습니다. 테스트가 주석에 지정된 시간보다 오래 걸리면 실패한 것으로 간주됩니다.
class TimeoutDemo {
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
이것으로 강의를 마칩니다.
GO TO FULL VERSION