2017-10-04 5 views
1

mockitoメソッドに問題があります:(...)。私がテストした場合:Mockitoからの()が正しく動作しない場合の方法

afterThrowExceptionShouldReturnCorrectHttpStatusを()

は、第2のテスト、第1のRAN:

controllerShouldReturnListOfAnns()

それはNotFoundExceptionを投げるので、それは常に失敗します。最初のテストを削除するか、2番目のテストを最初に実行すると、すべて正しいことになります。このようなメソッドのように、最初のテストオーバーライドメソッドwhen()は、2番目のテストを形成するテストコードとテスト構成があります。

@ActiveProfiles("dev") 
@RunWith(SpringRunner.class) 
@SpringBootTest 
public class AnnTestController { 

@Autowired 
private AnnounService annSrv; 
@Autowired 
private AnnounRepo annRepo; 
@Autowired 
private WebApplicationContext wac; 
private MockMvc mockMvc; 

@Before 
public void contextLoads() { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); 
} 


@Test 
public void afterThrowExceptionShouldReturnCorrectHttpStatus() throws Exception { 
    when(this.annRepo.getAnnounList()).thenThrow(NotFoundAnnounException.class); 
    this.mockMvc.perform(get("/ann/list")).andExpect(status().isNotFound()); 
} 


@Test 
public void controllerShouldReturnListOfAnns() throws Exception { 
    List<Announcement> lst = new ArrayList<>(); 
    lst.add(new Announcement(1, "test", "test")); 
    when(annRepo.getAnnounList()).thenReturn(lst); 
    this.mockMvc.perform(get("/ann/list")) 
.andExpect(status().isOk()) 
.andExpect(jsonPath("$[0].id", is(1))); 
}} 

設定:

@Profile("dev") 
@Configuration 
public class BeanConfig { 


@Bean 
public CommentsRepo commentsRepo() { 
    return mock(CommentsRepo.class); 
}} 

答えて

1

あなたはそのように気にいらを試すことができます。

@After public void reset_mocks() { 
    Mockito.reset(this.annRepo); 
} 
+0

これが機能しています!ありがとうございました! btw。なぜこの問題が発生するのですか?常にこのメソッド(@After)を追加するのが普通ですか? – destro1

+0

スプリングテストのライフサイクルはスプリングランナーによって制御されます。 SpringランナーはMockitoライフサイクルを考慮しません。 あなたはそれを自分で管理する必要があります – fiddels

関連する問題