मैं उलझन में हूं कि उनके बीच क्या अंतर है, और किस मामले में चयन करना है। कुछ अंतर स्पष्ट हो सकते हैं, जैसे any
और eq
, लेकिन मैं बस सुनिश्चित करने के लिए उन सभी को शामिल कर रहा हूं।मॉकिटो मैचर्स isA, any, eq, और इसी के बीच क्या अंतर है?
मैं अपने मतभेदों के बारे में चिंता है क्योंकि मैं इस समस्या भर में आया था: मैं एक नियंत्रक वर्ग
public Response doSomething(@ResponseBody Request request) {
return someService.doSomething(request);
}
में इस पोस्ट विधि है और वह नियंत्रक पर एक इकाई परीक्षण प्रदर्शन करने के लिए करना चाहते हैं। मेरे पास दो संस्करण हैं। पहले एक इस
@Test
public void testDoSomething() {
//initialize ObjectMapper mapper
//initialize Request req and Response res
when(someServiceMock.doSomething(req)).thenReturn(res);
Response actualRes = someController.doSomething(req);
assertThat(actualRes, is(res));
}
की तरह, सरल है लेकिन मैं इस एक
@Test
public void testDoSomething() {
//initialize ObjectMapper mapper
//initialize Request req and Response res
when(someServiceMock.doSomething(any(Request.class))).thenReturn(res);
mockMvc.perform(post("/do/something")
.contentType(MediaType.APPLICATION_JSON)
.content(mapper.writeValueAsString(req))
)
.andExpect(status().isOk())
.andExpect(jsonPath("$message", is("done")));
}
दोनों अच्छी तरह से काम की तरह, एक MockMvc दृष्टिकोण का उपयोग करना चाहता था। लेकिन मैं req
प्राप्त करने के लिए मेरी someServiceMock.doSomething()
MockMvc दृष्टिकोण में चाहता था, या कम से कम एक वस्तु की तरह सिर्फ पहली req
रूप में एक ही चर मान (नहीं बस किसी भी Request
वर्ग) है, और res
लौटने कि,। मुझे पता है कि MockMvc दृष्टिकोण (या यह है?) का उपयोग करना असंभव है, क्योंकि वास्तविक कॉल में पारित वस्तु हमेशा नकली में पारित वस्तु से अलग होती है। क्या वैसे भी मैं इसे प्राप्त कर सकता हूं? या यह भी ऐसा करने के लिए समझ में आता है? या मुझे any(Request.class)
का उपयोग करके संतुष्ट होना चाहिए? मैंने eq
, same
को आजमाया है, लेकिन वे सभी विफल हो गए हैं।
अग्रिम धन्यवाद। मुझे उम्मीद है कि मैंने खुद को अच्छी तरह से समझाया।