【发布时间】:2018-01-12 06:17:50
【问题描述】:
我正在为控制器方法实现一个测试用例。控制器方法如下所示,
public class LoginController{
public String register(String token){
//some logic
loginService.delete(String token);
//some logic
return "xxxx";
}
}
我正在实施测试用例来测试 register 方法,我不希望对方法 delete 进行评估。 (delete 方法是一个返回 void 的服务方法)。我做了一些研究,并在我的测试方法中使用了下面的代码来不评估删除方法,但是当我调试它时,它仍然进入了删除方法。谁能指出我做错了什么。
public class LoginControllerTest{
private loginService loginServiceMock;
@Test
public void testRegister(){
loginServiceMock = new loginServiceImpl();
loginService spy = spy(loginServiceMock);
doNothing().when(spy).delete(any(String.class));
//calling the controller method
}
}
【问题讨论】:
-
顺便说一句。 'org.mockito.Matchers' 中有 anyString() 匹配器。使用它而不是任何(String.class)。更干净,更快。您可以在 sourceCode 中检查 returnString() 比 org.mockito.internal.progress.HandyReturnValues 中的 returnFor(Class
clazz) 简单得多 -
@Anna,
delete类的delete方法是最终的吗?还是课程本身是最终的?这两个条件中的任何一个都会阻止该方法以您想要的方式被存根。 -
@DavidWallace 没有一个是最终的
-
好的,你如何将你的间谍对象注入
LoginController?您能否展示创建LoginController并将LoginService添加到其中的测试部分? -
看看 Mockito 中的 never() 方法
标签: java unit-testing mockito spy