2017-10-24 1 views
0

저는 스프링 부트로 mockito에서 초보자입니다. 내 문제는, 나는 mockito와 아래의 mockito를 사용합니다.모크 빈 사용 후 실제 메소드를 호출 할 수 없습니다.

@Autowired 
    private AnotherService anotherService; 

    @MockBean 
    private SchedulerService schedulerService; 

    @Test 
    public void test() { 
     NpMesaj npMesaj = new NpMesaj("npMesaj"); 
     when(schedulerService.schedule(any(NpMesaj.class))).thenThrow(new RuntimeException("Error")); 
     try { 
      anotherService.start(npMesaj); 
     } catch (Exception e) { 
     } 
     Optional<NpMesaj> npMesajFromDb = repository.findById(npMesaj.getId()); 
     assertThat("A_Err", npMesajFromDb.isPresent(), is(false)); 
    } 

SchedulerService는 anotherService.start 메소드에서 사용됩니다. 이 테스트 범위에서 조롱을 받았고 내 주장이 잘 작동합니다. 이 테스트 후에 다음과 같은 MY ANOTHER UNIT 테스트 등급이 실행되고 작동하지 않습니다. 모의 빈 또는 메소드를 포함하지 않습니다.

// Unit Test-2 
@Autowired 
private DiffService diffService; 

@Test 
public void test_2(){ 
    int diff = diffService.startDiffProcess(); 
    assertThat("A_Err", diff, is(0)); 
} 

이 시험 방법의 startDiffProcess 메소드 호출은 다음과 같이, 그 안에 anotherService.start 메소드를 호출 : 나는 위의 첫 번째 테스트에서 언급으로

@Autowired 
private AnotherService anotherService; 

public int startDiffProcess(){ 
    anotherService.start(); 
    return 0; 
} 

AnotherService이 SchedulerService를 사용합니다. Unit-test-2를 디버깅 할 때 AnotherService의 SchedulerService는 MockInterceptor가있는 mockitoMock으로 간주되어 실제 메소드를 실행할 수 없습니다.

왜 그럴 수 있습니까? 모의 메소드 호출을 재설정 할 수없는 이유는 무엇입니까? 감사합니다. .

+0

더 많은 테스트 클래스를 표시 할 수 있습니까? 클래스 수준의 주석? 어떻게 테스트를 실행합니까? –

답변

0

이것은 분명히 내가 경험하지 못한 이상한 행동입니다. 이 테스트 클래스는 같은 패키지에 있습니까?

어느 쪽이든, 첫 번째 테스트에서 클래스를 @DirtiesContext로 표시하여 해당 테스트에 사용 된 Spring 응용 프로그램 컨텍스트가 컨텍스트 캐시에서 제거되었는지 확인할 수 있습니다. 이렇게하면 다른 테스트 클래스에 동일한 컨텍스트가로드되지 않도록해야합니다.

관련 문제