스프링 통합 테스트에 문제가 있습니다.스프링 부트 @SpyBean이 컨텍스트가 재설정되지 않는 문제로 인해 테스트 스위트가 오류를 일으킬 수 있습니다.
동작은 : 나는 고립에서 아래의 테스트를 실행하면
, 그것은 성공이다.
그러나 모든 테스트가 실행되면 아래에있는 테스트를 포함하여 많은 테스트가 오류가 발생합니다.
아래의 테스트를 무시하고 모든 테스트를 실행하면 모두 성공합니다.
가 높은 우리의 비즈니스 로직과 관련이 있기 때문에 오류 스택 트레이스를 포함하지 않은 나는 오류가 스프링 부팅 테스트 @SpyBean
내 사용과 관련이있다 생각한다.
@RunWith(SpringRunner.class)
@ActiveProfiles(profiles = "test")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
...
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private DataKeyStore dataKeyStore;
@SpyBean
private TokenTools tokenTools;
...
@Test
public void myTest() throws Exception {
doReturn("someGeneratedToken")
.doReturn("someGeneratedToken")
.doCallRealMethod()
.when(tokenTools)
.createToken(any(TokenProfile.class), anyString(), anyString());
...
가
DataKeyStore
이
TokenTools
의 종속성입니다 참고 : 여기에
는 테스트입니다. 제가 위에서 말했듯이
, 나는
내 질문은 내가이 시험은 다른 시험을 밟지 않도록 할 수있는 방법입니다 ... 테스트는 서로 스테핑하고 나의 @SpyBean
어떻게 든 다른 테스트 클래스에 누수 의심 ? 나는
@SpyBean
이미 (문서/javadoc에 따라) 재설정한다는 것입니다 ... 아무 소용에
@DirtiesContext
주석을 시도했습니다.
아무도 도와 줄 수 있습니까?
편집 : 한 번 테스트의 초기화 및 위의 테스트에 대한 @SpyBean
을 만들기위한 두 번째 시간 : 테스트를 디버깅하는 내 IDE를 사용하여이 TokenTools
모든 시험에 두 번 밖에 인스턴스화하고 있음을 나타냅니다. 위 테스트에서 실행 된 나머지 테스트는 두 번째 인스턴스, 즉 @SpyBean
인스턴스를 사용합니다 ...
인스턴스 생성시'@ SpyBean'의 종속성이 변경된 전역 상태로 바뀌어 나중에 테스트 할 때 문제가 발생합니다. 따라서 @DirtiesContext를 사용하여 걱정할 필요가 없습니다. 우리의 응용 프로그램 디자인과 함께 ... – balteo
내 ** 편집 **은 여전히 그렇습니다. – balteo