私はSpring MVC @RestController
をテストしています。これは外部RESTサービスを呼び出します。私は春の環境をシミュレートするのにMockMvc
を使用しますが、私のコントローラーが外部サービスへの実際の呼び出しを行うことを期待しています。 RestControllerを手動でテストすると、Postmanなどでうまく動作します。コンテンツとヘッダが空であるため、スプリングMockMvcは2つのわずかに異なるアプローチのうちの1つで空のコンテンツを返す
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = AnywhereController.class)
public class AnywhereControllerTest{
@Autowired
private AnywhereController ac;
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testGetLocations() throws Exception {
...
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/anywhere/locations").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(containsString("locations")))
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON));
.andReturn();
}
テストが失敗した:
私は私のセットアップが特定の方法でのテストは、私は(ステータス・コードを除く)完全に空の応答を取得する場合ことがわかりました。
@Configuration
@EnableWebMvc
public static class TestConfiguration{
@Bean
public AnywhereController anywhereController(){
return new AnywhereController();
}
}
、さらに私はContextConfiguration
注釈(私はこれが実際に何を知りたいのですが)変更:それから私は、テストクラスにこれを追加しようとした
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration
public class AnywhereControllerTest{...}
今、突然すべてのチェックを成功し、コンテンツ本文を印刷するときにすべてのコンテンツを取得しています。
ここで何が起こっているかこれら2つのアプローチの違いは何ですか?
違いは、 '@ EnableWebMvc'によって登録されたすべてのBeanです。 –
もう少し説明できますか? – Shady