【发布时间】:2017-05-12 08:22:51
【问题描述】:
我正在开发基于 Spring 的项目并使用 JUnit + Mockito 编写单元测试用例。我在将布尔值存根到同一测试类的私有方法时遇到问题(将访问级别更改为公共后,我仍然未能存根布尔值)。
下面的代码sn-p显示了相同问题的模拟
class ABC {
public String method1(User userObj){
String result = "";
if(!isValidUser(userObj.getSessionID())){
return "InvalidUser";
} else {
// execute some logic
}
return result;
}
private boolean isValidUser(String sessionId) {
// Here it calls some other class to validate the user
if (sessionId == null || UserSessionPool.getInstance().getSessionUser(sessionId) == null) {
return false;
} else {
return true;
}
}
}
这里,我想为method1()写一个测试用例。在 ABC 类中,我有一个名为 isValidUser() 的方法,它通过查看包含所有已登录使用的详细信息(即 UserSessionPool.getInstance().getSessionUser(sessionId))的全局会话池来帮助识别会话中的用户。
在测试method1()时,测试控制器触发isValidUser(userObj.getSessionID())的那一刻我想从isValidUser()方法中返回true,这样我就可以继续测试其余的实现逻辑了。
到目前为止,我已经尝试了以下方法,使用 spy 和 mocked object 来调用 isValidUser() 方法并尝试返回 true,但没有任何效果。
使用 PowerMockito
PowerMockito.doNothing().when(spyed_ABC_ClassObject, "isValidUser", true);
或
PowerMockito.doReturn(true).when(cntrl, "isValidUser", Mockito.anyString());
使用白盒
Whitebox.invokeMethod(spyed_ABC_ClassObject, "isValidUser", Mockito.anyString());
使用 Mockito.when
when(spyed_ABC_ClassObject.isValidUser(Mockito.anyString())).thenReturn(true);
或
Mockito.doNothing().when(spyed_ABC_ClassObject).isValidUser(Mockito.anyString());
【问题讨论】:
标签: java unit-testing junit mockito powermockito