【发布时间】:2017-11-25 13:09:42
【问题描述】:
我正在为以下给定方法编写测试用例。
方法:
@Override
public void removeAllConnections(String uuid, String userName, String oimId) {
customLogger.debug(Thread.currentThread().getStackTrace()[1].getMethodName(), userName, null, null, accessProviderBuilder.getUserName(), accessProviderBuilder.getUuid());
UserAccessBean userAccessBean = new UserAccessBean(userName);
userAccessBean.setOimid(oimId);
userAccessBean.setToken("");
log.info("removeAllConnections:oimid:"+userAccessBean.getOimId());
UserProfileDetailBean userProfileDetail = accessClient.getAccess(userAccessBean,applicationForCsr);
Set<AccountAccess> accountAccesses = userProfileDetail.getAccountAccessList();
try {
removeAllConnectionsExceptPrimary(oimId, userName, accountAccesses);
removePrimaryConnection(oimId, userName, accountAccesses);
} catch (ConnectionStateException e) {
throw new ConnectionStateException(ConnectionNameNotRemoved, CONNECTION_REMOVAL_FAILED_MSG);
} catch (InternalServerErrorException e) {
throw new InternalServerErrorException(INTERNAL_SERVER_ERROR, INTERNAL_SERVER_ERROR_MSG);
}
}
sn-p 下面是给定方法的测试用例。
测试用例:
@Test
public void testRemoveAllConnections() {
UserAccessBean userAccessBean = new UserAccessBean(userName);
when(accessClient.getAccess(userAccessBean,"CSR")).thenReturn(userProfileDetail);
when(userProfileDetail.getAccountAccessList()).thenReturn(accountAccesses);
String applicaionForCSR = "CSR";
ReflectionTestUtils.setField(service, "applicationForCsr", applicaionForCSR);
service.removeAllConnections(uuid, userName, oimId);
}
在调试代码时,由于 userProfileDetail 的值为 null,我的执行在给定行下方失败。
Set<AccountAccess> accountAccesses = userProfileDetail.getAccountAccessList();
在 accessClient.getAccess(userAccessBean,applicationForCsr) 上执行检查元素时,它会抛出以下错误。很确定这是一个愚蠢的错误,但无法追踪。
错误:
没有这样的实例方法:'UserProfileDetailBean v1.AccessService$$EnhancerByMockitoWithCGLIB$$a852895d.getAccess (UserAccessBean)'
应用程序:Spring Boot 1.5.0 库:Mockito 2.7.X
【问题讨论】:
-
请阅读minimal reproducible example 并相应地增强您的问题。你不认为如何声明/注入 null 变量很重要吗?
-
感谢您的建议,但 null 值本身就是我的问题的一部分。输入总是受欢迎的,
-
在您的 removeAllConnections 方法中创建的 UserAccessBean 和在您的测试方法中创建的 UserAccessBean 很可能不相等。因此,模拟 accessClient.getAccess() 方法为 removeAllConnections 方法中创建的 UserAccessBean 返回 null。为了更好地解释,你基本上在做,在你的测试中,
when(accessClient.getAccess(user1) ...,而在代码中,有一个对accessClient.getAccess(someOtherDifferentUser, ...)的调用。 -
@JBNizet 确认,两个地方的值是一样的。
-
如何确认?贴出你执行的代码,证明两个 UserAccessBean 实例是相等的。
标签: java intellij-idea junit mockito testcase