programing

junit5와 함께 SpringRunner를 사용하기 위한 특별한 구성이 있습니까?

closeapi 2023. 6. 30. 22:22
반응형

junit5와 함께 SpringRunner를 사용하기 위한 특별한 구성이 있습니까?

스프링 부트 프레임워크 기반 마이크로 서비스 프로젝트 및 스프링 러너와 함께 실행되는 모든 유닛 테스트.

@RunWith(SpringRunner.class)

이 주석을 추가하면 다음 라이브러리를 가져옵니다.

import org.springframework.test.context.junit4.SpringRunner;

junit5에서 실행할 시험 수업을 어떻게 설정할 수 있습니까?

JUNit Jupiter(일명 JUNit 5)를 사용하면 JUNit 4 메커니즘이므로 더 이상 @RunWith(SpringRunner.class)가 필요하지 않습니다.최신 버전의 Spring/Spring Boot JUNit 5에서는 "Spring-boot-starter-test"를 사용하여 기본 제공됩니다.

혼란스러운 JUNit 4 및 5 기능의 가능성을 줄이기 위해 Maven/Gradle 파일에서 JUNit 4에 대한 종속성을 제외할 것을 권장합니다.

다음은 기본 사항을 보여주는 기사입니다: https://howtodoinjava.com/spring-boot2/testing/junit5-with-spring-boot2/

빌드 경로에서 JUNit4를 제거합니다.

예:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@TestPropertySource(locations = "classpath:application-local.properties")
public class MyTest {
    @Before
    public void setUp() {
        ...
    }

    @Test
    public void testMethod() {
        Assert.assertTrue(...);
    }
}

될 것입니다

@SpringBootTest(classes = Application.class)
@TestPropertySource(locations = "classpath:application-local.properties")
public class MyTest {
    @BeforeEach
    public void setUp() {
        ...
    }
    @Test
    public void testMethod() {
       Assertions.assertTrue(...);
    }
}

Spring 2.4에는 JUNit 5가 포함되어 있으며 기본 설정으로 되어 있습니다.

업데이트 외에도.@RunWith(SpringJUnit4ClassRunner.class)@ExtendWith(SpringExtension.class)는 다을추했다습에 .build.gradle테스트가 실제로 실행되는 경우:

test {
    useJUnitPlatform {}
}

이 마지막 단계는 JUNIT 4가 저의 종속성 중 하나이기 때문일 수도 있지만, 제가 읽은 다른 모든 것은 이것이 필요하다는 것을 암시하지 않았습니다.

첫 번째 주석 @RunWith(SpringRunner.class)는 SpringBoot 테스트 기능과 Junit 사이의 브리지를 제공하는 데 사용됩니다.SpringRunner.class를 사용하면 테스트에서 콩의 스프링 컨텍스트 로드 및 종속성 주입을 완벽하게 지원할 수 있습니다.@스프링 부츠SpringApplication을 통해 테스트에서 사용할 ApplicationContext 테스트를 만듭니다.내장된 서버 이후로 전체 컨테이너를 부트스트랩하고 웹 환경을 만듭니다.

이 테스트에서는 실제 웹 환경을 RANDOM_PORT로 설정하고 WebServerApplicationContext도 로드하는 것처럼 흉내낼 수 있습니다.내장된 서버가 임의 포트에서 시작되고 수신됩니다.

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {YourPackage.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class YourClassTest {

    @LocalServerPort
    private int port;

    @Autowired
    TestRestTemplate restTemplate;
    HttpHeaders headers = new HttpHeaders();

    @ParameterizedTest
    @JsonFileSource(resources = "/param.json")
    void createBusinessEntity(JsonObject object){
      ....
    }
}

@LocalServerPort 주석은 런타임에 할당된 주입된 HTTP 포트를 제공합니다.@Value("${local")에 대한 편리한 대안입니다.server.port}".

Spring 애플리케이션 내의 타사 REST 서비스에 액세스하려면 Spring RestTemplate 또는 TestRestTemplate를 테스트 클래스에 주입하여 통합 테스트에 적합한 편리한 대안을 사용합니다.프로젝트의 spring-boot-starter-test 종속성을 사용하여 런타임에서 "TestRestTemplate" 클래스에 액세스할 수 있습니다.

우리의 테스트 방법에서는 JSON 문자열 또는 매개 변수화된 테스트의 파일에서 데이터를 로드하기 위한 주석을 제공하는 Junit 5 라이브러리인 junit-json-params를 사용하고 있습니다.우리는 또한 @Parameterized로 방법에 주석을 달았습니다.아래 라이브러리를 보완하기 위해 주석을 테스트합니다.주석이 달린 방법이 매개 변수화된 테스트 방법임을 알리는 데 사용됩니다.이 메소드는 개인적이거나 정적이어서는 안 됩니다.또한 @ArgumentsSource 또는 해당 구성된 주석을 통해 ArgumentsProvider를 하나 이상 지정해야 합니다.

@ArgumentsSource test.dll 패키지 안에 넣은 JSON 파일 @JsonFileSource(리소스 = "param.json")를 소스로 만듭니다.@JsonFileSource를 사용하면 클래스 경로의 JSON 파일을 사용할 수 있습니다.단일 객체, 객체 배열 및 JSON 프리미티브를 지원합니다.

파일에서 검색된 JSON 개체는 메서드 매개 변수 "개체"에 바인딩되어 POJO 개체(이 경우에는 엔티티 모델)로 변환됩니다.

Pom.xml에서 이 라이브러리를 가져와야 합니다.

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>

        <exclusions>
            <exclusion>
                <groupId>com.vaadin.external.google</groupId>
                <artifactId>android-json</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

       <dependency>
            <groupId>net.joshka</groupId>
            <artifactId>junit-json-params</artifactId>
            <version>5.5.1-r0</version>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <version>${mockito.version}</version>
        </dependency>

        <dependency>
            <groupId>org.junit</groupId>
            <artifactId>junit-bom</artifactId>
            <version>${junit-jupiter.version}</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>

Junit 5를 사용하여 스프링 부트 마이크로 서비스를 테스트하는 방법에 대한 전체 샘플과 설명을 단계별로 액세스할 수 있는 DZone 및 내 블로그에 게시된 이러한 기사를 보십시오. https://dzone.com/articles/microservices-in-publish-subscribe-communication-u

언급URL : https://stackoverflow.com/questions/61088682/is-there-any-special-configuration-to-use-springrunner-with-junit5

반응형