如何编写 Junit、Mockito 测试用例,用于使用 if-else 条件示例绑定(bind)结果 @Valid
功能?
@RequestMapping(value = "/scriptfile", method = RequestMethod.POST)
public String create(
@Valid ScriptFile scriptFile,
BindingResult result,
ModelMap modelMap
)
{
if (scriptFile == null)
throw new IllegalArgumentException("A scriptFile is required");
if (result.hasErrors()) {
modelMap.addAttribute("scriptFile", scriptFile);
modelMap.addAttribute("showcases", ShowCase.findAllShowCases());
return "scriptfile/create";
}
scriptFile.persist();
return "redirect:/scriptfile/" + scriptFile.getId();
}
如何为上面的示例编写 Junitm Mockito 测试用例?
最佳答案
事情会是这样的。如果可以实例化对象,则可以使用 spy 而不是模拟。或者甚至创建一个 ModelMap 实例并检查属性是否设置正确而不是模拟。
@Mock
private BindingResult result;
@Mock
private ModelMap modelMap;
@Mock
private ScriptFile scriptFile;
@BeforeMethod
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test(expectedExceptions = {IllegalArgumentException.class})
public void shouldThrowIllegalArgumentException() {
create(null, result, modelMap);
}
@Test
public void shouldPersistFile() {
Mockito.when(result.hasErrors()).thenReturn(false);
Mockito.when(scriptFile.getId()).thenReturn("FILE_ID");
String output = create(scriptFile, result, modelMap);
Mockito.verify(scriptFile, times(1)).persist();
assertEquals("redirect:/scriptfile/FILE_ID", output)
}
@Test
public void shouldHandleErrors() {
Mockito.when(result.hasErrors()).thenReturn(true);
Mockito.when(scriptFile.getId()).thenReturn("FILE_ID");
String output = create(scriptFile, result, modelMap);
Mockito.verify(modelMap, times(2)).addAttribute(Mockito.any(), Mockito.any());
assertEquals("scriptfile/create", output)
}
关于java - 如何编写junit mockito测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45750828/