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
    }
}

SpringExtensionSpring 프레임워크의 테스트 버전을 생성하지만 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
    }
}

이것으로 강의를 마칩니다.