我在尝试模拟 NamingEnumeration 时遇到问题。此外,我无法覆盖到 lambda 表达式内部。我也无法获得 while 循环内的覆盖范围。当我通过这些方法运行单元测试时,覆盖率仅通过 显示ldapTemplate.search,它会跳过 lambda 表达式内部的内容,并通过返回列表。我尝试将 Mock 注释添加到 NamingEnumeration 和 Attribute 对象。while 循环似乎认为 NamingEnumeration 是空的,因为没有覆盖。
以下结果导致“测试类中检测到不必要的存根”:doReturn(true,false).when(enumeration).hasMore();和doReturn(attr).when(enumeration).next();
这是我的 Ldap 方法
public List<MyObject> ldapQueryList(final String ldapSearch, final String key) {
List<MyObject> list = new ArrayList<>();
ldapTemplate.search("ou=User Accounts", "cn=" + ldapSearch), (Attributes attrs) -> {
NamingEnumeration<?> enumeration = attrs.get(key).getAll();
list.addAll(addToList(enumeration));
return attrs;
});
return list;
}
public List<MyObject> addToList(NamingEnumeration<?> enumeration) throws NamingException {
List<MyObject> list = new ArrayList<>();
while (enumeration.hasMoreElements()) {
final MyObject myObj = new MyObject();
final String str = (String)enumeration.nextElement();
myObj.setMyString(str);
list.add(myObj);
}
enumeration.close();
return list;
}
这是单元测试
@RunWith(MockitoJUnitRunner.class)
public class LdapQueryDaoTest {
@Mock
private LdapTemplate ldapTemplate;
@InjectMocks
private LdapDao ldapDao;
@Mock
private NamingEnumeration<?> enumeration;
@Mock
private Attribute attr;
@Test
public void ldapQueryList() throws DataAcesExcp, NamingException {
List<String> searchResult = Collections.singletonList("search result");
when(ldapTemplate.search( Mockito.anyString(), Mockito.anyString(), ArgumentMatchers.<AttributesMapper<String>> any())).thenReturn(searchResult);
List<EmployeeVo> responseEntity = ldapDao.ldapQueryList(Const.EMPLOYEE_ID, "myLdapObj");
Assert.assertNotNull(responseEntity);
}
慕桂英4014372
相关分类