我想爲我的控制器進行單元測試。 下面是從我控制器的方法,我想測試:單元測試包含自定義驗證的控制器
public class SomeController {
@Autowired public RequestValidator reqValidator;
@Autowired public SomeService service;
@ResponseBody
@RequestMapping(value = "/Inquiry", method = RequestMethod.GET)
public String inquiry(HttpServletRequest httpServletRequest, @ModelAttribute Request req, BindingResult bindingResult) {
reqValidator.validate(req, bindingResult);
if (bindingResult.hasErrors()) {
return something;
}
return service.inquiry(req);
}
}
ReqValidator是自定義驗證我實施檢查每個請求字段爲空,太長了,一些其他的東西,我不能用Hibernate實現驗證器。
無論如何,我正在測試這種方法的成功情況。這是我的測試方法。
public class SomeControllerTest {
@Mock private RequestValidator reqValidator;
@Mock private SomeService service;
@InjectMocks private SomeController controller;
private MockMvc mockMvc;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void testInquiry_success() throws Exception {
when(service.inquiry(any(Request.class))).thenReturn(res);
mockMvc.perform(get("/Inquiry")
.param("email", "[email protected]")
.param("phoneNumber", "01189998819991197253")
)
.andExpect(status().isOk())
.andExpect(content().string(res));
}
}
上述測試進行得很順利。但是當我想要測試負面情景時,我就陷入了困境,例如,其中一個領域是空的。測試似乎沒有進入reqValidator.validate()方法。即使我將電子郵件和電話號碼設爲空。我如何才能測試負面情況?我如何讓我的測試進入驗證?
下面是我自定義的驗證類,它實現了spring的Validator。
@Component
public class RequestValidator implements Validator {
// omitted to be concise
@Override
public void validate(Object o, Errors errors) {
// validate something
}
}
我希望我能解釋我的自我。 謝謝。
測試代碼看起來不完整。 mockMvc和服務從哪裏來?你能發佈完整的代碼嗎?它看起來像你在嘲笑服務,莫名其妙地與mockMvc進行交互。 – hulkmeister
我編輯了代碼。 –
你正在使用哪個模擬框架? – Raedwald