java - 如何编写junit mockito测试用例

标签 java spring-mvc junit mockito

如何编写 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/

相关文章:

java - MockitoJUnit 测试无法实例化模拟对象

Eclipse 中的 Java 类错误

Java - 为什么被覆盖的方法被调用两次(或者至少看起来是这样)?

mysql - 从 Java 配置数据源(无 XML)

Java:如何测试调用 System.exit() 的方法?

java - TDD 和软件设计之间有什么关系?

java - 使用注释来计算方法的运行时间

java - Apache VFS sftp-正在获取多个文件对象来创建多个 session 或 channel ?

java - Spring MVC 休息 Controller 未调用

java - 没有名为 'springSecurityFilterChain' 的可用 bean