1 回答
TA贡献1871条经验 获得超13个赞
我在尝试模拟 NamingEnumeration 时遇到问题。
考虑改用真正的枚举。基本上,您应该只模拟自己创建的过于复杂的对象(列表、迭代器和枚举是不复杂对象的示例)。
此外,我无法覆盖到 lambda 表达式内部。
它按预期工作。您模拟(读取替换)了搜索方法,因此没有对 lambda 表达式的求值,因为它已经具有定义的结果。
while 循环似乎认为 NamingEnumeration 是空的,因为没有覆盖。
以下结果导致“在测试类中检测到不必要的存根”:doReturn(true,false).when(enumeration).hasMore(); 和 doReturn(attr).when(enumeration).next();
hasMore 和 next 是您的拼写错误,因为您的示例中调用的方法是 hasMoreElements 和 nextElement。
@Test
public void addToList() throws NamingException {
doReturn(true,false).when(enumeration).hasMoreElements();
doReturn(attr).when(enumeration).nextElement();
Assert.assertNotNull(ldapQueryDaoImpl.addToList(enumeration));
}
您可以单独验证 lambda 表达式,示例如下:
class MyMatcher implements AttributesMapper<Attributes> {
List<MyObject> list = new ArrayList<>();
public Attributes mapFromAttributes(Attributes attrs) {
NamingEnumeration<?> enumeration = attrs.get(key).getAll();
list.addAll(addToList(enumeration));
return attrs;
}
}
public void test() {
NamingEnumeration<? extends Attribute> enumeration = ...
Attribute attributeMock = mock(Attribute.class);
when(attributeMock.getAll()).thenReturn(enumeration);
Attributes attributesMock = mock(Attributes.class);
when(attributesMock.get(any(String.class)).thenReturn(attributeMock);
MyMatcher matcher = new MyMatcher();
matcher.mapFromAttributes(attr);
// assert ... matcher.list
}
添加回答
举报