1 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
我在嘗試模擬 NamingEnumeration 時(shí)遇到問(wèn)題。
考慮改用真正的枚舉?;旧?,您應(yīng)該只模擬自己創(chuàng)建的過(guò)于復(fù)雜的對(duì)象(列表、迭代器和枚舉是不復(fù)雜對(duì)象的示例)。
此外,我無(wú)法覆蓋到 lambda 表達(dá)式內(nèi)部。
它按預(yù)期工作。您模擬(讀取替換)了搜索方法,因此沒(méi)有對(duì) lambda 表達(dá)式的求值,因?yàn)樗呀?jīng)具有定義的結(jié)果。
while 循環(huán)似乎認(rèn)為 NamingEnumeration 是空的,因?yàn)闆](méi)有覆蓋。
以下結(jié)果導(dǎo)致“在測(cè)試類(lèi)中檢測(cè)到不必要的存根”:doReturn(true,false).when(enumeration).hasMore(); 和 doReturn(attr).when(enumeration).next();
hasMore 和 next 是您的拼寫(xiě)錯(cuò)誤,因?yàn)槟氖纠姓{(diào)用的方法是 hasMoreElements 和 nextElement。
@Test
public void addToList() throws NamingException {
doReturn(true,false).when(enumeration).hasMoreElements();
doReturn(attr).when(enumeration).nextElement();
Assert.assertNotNull(ldapQueryDaoImpl.addToList(enumeration));
}
您可以單獨(dú)驗(yàn)證 lambda 表達(dá)式,示例如下:
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
}
添加回答
舉報(bào)