source

스프링 부트 테스트 - 여러 테스트가 단일 컨텍스트를 공유할 수 있습니까?

lovecheck 2023. 6. 26. 21:26
반응형

스프링 부트 테스트 - 여러 테스트가 단일 컨텍스트를 공유할 수 있습니까?

스프링 부트 테스트 클래스(1.4.0 포함)를 여러 개 만들었습니다.

FirstActionTest.java:

@RunWith(SpringRunner.class)
@WebMvcTest(FirstAction.class)
@TestPropertySource("classpath:test-application.properties")
public class FirstActionTest {
    @Autowired
    private MockMvc mvc;

    // ...
}

SecondActionTest.java:

@RunWith(SpringRunner.class)
@WebMvcTest(SecondAction.class)
@TestPropertySource("classpath:test-application.properties")
public class SecondActionTest {
    @Autowired
    private MockMvc mvc;

    // ...
}

다음을 통해 테스트를 실행하는 경우:

MVN 테스트

각 시험 수업마다 봄 시험 상황을 만들어 준 것 같은데, 그럴 필요는 없을 것 같습니다.

질문은 다음과 같습니다.

  • 여러 테스트 클래스 간에 단일 스프링 테스트 컨텍스트를 공유할 수 있으며, 만약 그렇다면 어떻게 해야 합니까?

두 개의 다른 클래스를 사용하여@WebMvcTest(즉,@WebMvcTest(FirstAction.class)그리고.@WebMvcTest(SecondAction.class)) 다른 응용프로그램 컨텍스트를 원한다는 것을 구체적으로 나타냅니다.이 경우 각 컨텍스트에 다른 콩 집합이 포함되어 있으므로 단일 컨텍스트를 공유할 수 없습니다.콘트롤러 콩이 상당히 잘 작동한다면 콘텍스트를 만드는 것이 비교적 빠르고 실제로 문제가 없어야 합니다.

모든 웹 테스트에서 캐시하고 공유할 수 있는 컨텍스트를 사용하려면 컨텍스트에 정확히 동일한 빈 정의가 포함되어 있는지 확인해야 합니다.떠오르는 두 가지 옵션:

사용@WebMvcTest컨트롤러를 지정하지 않았습니다.

첫 번째 액션테스트:

@RunWith(SpringRunner.class)
@WebMvcTest
@TestPropertySource("classpath:test-application.properties")
public class FirstActionTest {
    @Autowired
    private MockMvc mvc;

    // ...
}

두 번째 액션테스트:

@RunWith(SpringRunner.class)
@WebMvcTest
@TestPropertySource("classpath:test-application.properties")
public class SecondActionTest {
    @Autowired
    private MockMvc mvc;

    // ...
}

사용 안 함@WebMvcTest따라서 웹 문제뿐만 아니라 모든 문제를 포함하는 애플리케이션 컨텍스트를 얻을 수 있습니다.

첫 번째 액션테스트:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource("classpath:test-application.properties")
public class FirstActionTest {
    @Autowired
    private MockMvc mvc; // use MockMvcBuilders.webAppContextSetup to create mvc

    // ...
}

두 번째 액션테스트:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource("classpath:test-application.properties")
public class SecondActionTest {
    @Autowired
    private MockMvc mvc; // use MockMvcBuilders.webAppContextSetup to create mvc

    // ...
}

캐슁된 컨텍스트를 사용하면 여러 테스트를 더 빠르게 실행할 수 있지만, 개발 시점에 단일 테스트를 반복적으로 실행할 경우 많은 콩을 생성하고 즉시 폐기해야 하는 비용이 발생합니다.

언급URL : https://stackoverflow.com/questions/40236904/spring-boot-testing-could-multiple-test-share-a-single-context

반응형