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);
}}
これが機能しています!ありがとうございました! btw。なぜこの問題が発生するのですか?常にこのメソッド(@After)を追加するのが普通ですか? – destro1
スプリングテストのライフサイクルはスプリングランナーによって制御されます。 SpringランナーはMockitoライフサイクルを考慮しません。 あなたはそれを自分で管理する必要があります – fiddels