函数im测试通过不同的输入调用函数findByNames并期望不同的输出。我需要使用服务uDao来模拟它。那么我应该写两个不同的期望吗?但它不起作用......我该如何处理这种情况?
EasyMock.expect(uDao.findByNames(CollectionUtils.newArrayList(target1Username)))
.andReturn(CollectionUtils.newArrayList(target1Group)).once();
//code in between
EasyMock.expect(uDao.findByNames(CollectionUtils.newArrayList(target1Username, ownerUsername)))
.andReturn(CollectionUtils.newArrayList(target1Group, ownerGroup));
/*target1Username, ownerUsername are strings and target1Group,
ownerGroup are of class UserGroup
*/
答案 0 :(得分:0)
您的失败讯息:
<failure message="java.lang.AssertionError: Unexpected method call
findByNames([elementsuser1@elements.com, owner@owner.com]):
findByNames([elementsuser1@elements.com, owner@owner.com]): expected: 1, actual: 0"
意味着传入的集合不相等。
EasyMock使用对象相等来测试参数是否匹配。既然您说第一次调用findByNames
有效(使用Collection<String>
)而第二次调用(使用Collection<UserGroup>
)失败,我猜测问题就在于{{1 }。class。
传入的集合的UserGroup
似乎具有与预期相同的toString()
值,因此:
toString()
方法检查未设置为相等值或UserGroup.equals()
未定义equals方法,因此使用默认的相等性检查。默认的equals方法只说对象是相同的,如果它们是相同的引用。因此具有相同值的两个不同实例将不相等。或UserGroup
返回的Collection未正确实现equals。我将假设此方法来自第三方库并正确实现。我只是把这个放在这里,其他2个场景不能解决问题。