新しいSpring Boot 1.4 @WebMvcTest
を使ってMockMVc
をさまざまな方法で設定する作業コードはほとんどありません。私はstandaloneSetupアプローチを理解しています。私が知りたいのは、MockMvc
からWebApplicationContext
までの設定と、MockMvc
の自動配線の違いです。Springブート1.4で@WebMvcTestでMockMvcをセットアップするMVCテスト
コードスニペット1:WebMvcTest
APIドキュメント、デフォルトであたりとしてMockMvc WebApplicationContextセットアップを通じて
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = ProductController.class)
public class ProductControllerTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@MockBean
private ProductService productServiceMock;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testShowProduct() throws Exception {
Product product1 = new Product();
/*Code to initialize product1*/
when(productServiceMock.getProductById(1)).thenReturn(product1);
MvcResult result = mockMvc.perform(get("/product/{id}/", 1))
.andExpect(status().isOk())
/*Other expectations*/
.andReturn();
}
}
、@WebMvcTestでアノテートテストも春のセキュリティとMockMvcを自動設定します。だから、ここでは401 Unauthorizedステータスコードが期待されましたが、テストには200ステータスコードが渡されます。
次に、私は自動配線MockMvc
を試してみましたが、私は@AutoConfigureMockMvc(secure=false)
を追加したり、セキュリティを無効にする@WebMvcTest
注釈を更新しない限り、テストは、401不正なステータスコードで失敗します。続いて
@WebMvcTest(controllers = IndexController.class, secure = false)
は渡すコードです明示的にセキュリティを無効にした後にのみ。
コードスニペット2:オートワイヤリングてMockMvc
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = ProductController.class)
@AutoConfigureMockMvc(secure=false)
public class ProductControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@MockBean
private ProductService productServiceMock;
@Test
public void testShowProduct() throws Exception {
Product product1 = new Product();
/*Code to initialize product1*/
when(productServiceMock.getProductById(1)).thenReturn(product1);
MvcResult result = mockMvc.perform(get("/product/{id}/", 1))
.andExpect(status().isOk())
/*Other expectations*/
.andReturn();
}
}
だから私の質問は以下のとおりです。自動配線MockMvc
はなかったが、コードは1つのレポートAA 401不正なステータスコードのエラーをスニペットなかったのはなぜ
。また公式のdocが言うところを繰り返します。デフォルトでは、@WebMvcTestで注釈が付けられたテストは、Spring SecurityとMockMvcも自動的に設定します。しかし、この場合、
@WebMvcTest
は、(コードスニペット1は401エラーなしで通過するので)スプリングセキュリティの自動設定とは関係ありません。それは最終的に私がMockMvc
をどのようにセットアップするかまで沸騰します。私はここで正しいですか?両方のアプローチの違いと目的は何ですか?
@AutoConfigureMockMvc(secure=false)
でセキュリティを無効にする方法と、@WebMvcTest(controllers = IndexController.class, secure = false)
との違いはどのように違いますか?どちらが優先されるのか、いつ使用されるのかはどこですか?