मेरे पास MockMVc
को नए स्प्रिंग बूट 1.4 @WebMvcTest
के साथ विभिन्न तरीकों से सेट करने के लिए कुछ कार्य कोड हैं। मैं स्टैंडअलोनसेट दृष्टिकोण को समझता हूं। मैं क्या जानना चाहता हूं MockMvc
WebApplicationContext
के माध्यम से और MockMvc
को स्वचालित रूप से सेट करने के बीच अंतर है।स्प्रिंग बूट में @WebMvcTest के साथ MockMvc सेट करना 1.4 एमवीसी परीक्षण
कोड स्निपेट 1: 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
API दस्तावेज़ के रूप में, डिफ़ॉल्ट रूप से, @WebMvcTest साथ एनोटेट भी वसंत सुरक्षा और MockMvc ऑटो कॉन्फिगर करेगा परीक्षणों के माध्यम से। इसलिए, मुझे यहां एक 401 अनधिकृत स्टेटस कोड की उम्मीद है, लेकिन परीक्षण 200 स्टेटस कोड के साथ गुजरता है।
इसके बाद, मैं ऑटो तारों MockMvc
कोशिश की, लेकिन परीक्षण, 401 अनधिकृत स्थिति कोड के साथ विफल रहता है जब तक कि मैं @AutoConfigureMockMvc(secure=false)
जोड़ सकते हैं या सुरक्षा को अक्षम करने @WebMvcTest
एनोटेशन अद्यतन:
@WebMvcTest(controllers = IndexController.class, secure = false)
के बाद कोड है कि गुजरता है सुरक्षा को स्पष्ट रूप से अक्षम करने के बाद ही।
कोड स्निपेट 2: MockMvc Autowiring
@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();
}
}
के माध्यम से तो मेरी प्रश्न हैं:
कोड क्यों झलकी नहीं था 1 रिपोर्ट आ 401 अनधिकृत स्थिति कोड त्रुटि जबकि ऑटो तारों
MockMvc
किया । यह भी दोहराता है कि आधिकारिक डॉक्टर डिफ़ॉल्ट रूप से, @WebMvcTest के साथ एनोटेटेड परीक्षण स्प्रिंग सिक्योरिटी और मॉकएमवीसी को स्वतः कॉन्फ़िगर भी करेगा। लेकिन, इस मामले में यह@WebMvcTest
को स्प्रिंग सुरक्षा स्वत: कॉन्फ़िगर करने के साथ कुछ भी नहीं है (क्योंकि कोड स्निपेट 1 किसी भी 401 त्रुटि के बिना गुजरता है)। अंततः यहMockMvc
को स्थापित करने के लिए उबलता है। क्या मैं यहाँ सही हूँ?दोनों दृष्टिकोणों के बीच अंतर/उद्देश्यों क्या हैं?
@AutoConfigureMockMvc(secure=false)
के माध्यम से सुरक्षा को अक्षम करने से@WebMvcTest(controllers = IndexController.class, secure = false)
के माध्यम से क्या करना अलग है। कौन सा पसंदीदा दृष्टिकोण है या जब (या कहां) उनका उपयोग करना है?