![](/img/trans.png)
[英]How to get full coverage for Java Code Coverage? Junit test cases
[英]How to Mock LdapTemplate in Java and get full code coverage
我正在嘗試使用 Mockito 對一個非常簡單的 junit 測試進行全面覆蓋,並且正在脫穎而出。 我的免責聲明是我是 Mockito 的新手,盡管我想做的事情看起來很簡單。
請注意,我的 junit 測試通過,只是覆蓋不完整。 運行測試時,返回 true 的方法部分(用戶列表不為空)未運行/覆蓋。
我的問題是...
ldap 是否需要准備好任何測試數據?
你能簡單地模擬 ldap 數據嗎?
非常感謝您提供的任何見解。
這是正在測試的方法(類名 = LdapRepository)...
public Mono<Boolean> ldapTemplateQuery(Email email) {
Mono<Boolean> blockingWrapper = Mono.fromCallable(() -> {
List<LdapUser> users = ldapTemplate.find(query().where("cn").is(email.address()), LdapUser.class);
if (users.isEmpty()) {
return false;
} else {
return true;
}
}).onErrorResume(
original -> Mono.error(new UserNotFoundException("User not found for email " + email.address())));
return blockingWrapper.subscribeOn(Schedulers.elastic());
}
這是 junit class ...
@RunWith(MockitoJUnitRunner.class)
public class LdapUserRepositoryMockTest {
private @InjectMocks LdapUserRepository ldapUserRepository;
@Mock
private LdapTemplate ldapTemplate;
Email email = new Email("abcd@xyz.com");
User user = new User(email);
static final String password = "VGVzdEAxMjM=";
@Test
public void ldapTemplateQueryTest() {
LdapUser ldapUser = new LdapUser(user, password.toCharArray());
List<LdapUser> users = new ArrayList<>();
users.add(ldapUser);
lenient().when(ldapTemplate.find(query().where(Mockito.anyString()).is(Mockito.anyString()), LdapUser.class)).thenReturn(users);
Mono<Boolean> locked = ldapUserRepository.ldapTemplateQuery(email);
StepVerifier.create(locked).expectNext(false).verifyComplete();
}
這是覆蓋結果的屏幕截圖......
在某人的大力幫助下,我得到了答案。 正如您將在下面看到的,這是對寬松聲明的一個相當小的改動。
希望這對沿途的人有所幫助。
@RunWith(MockitoJUnitRunner.class)
public class LdapUserRepositoryMockTest {
private @InjectMocks LdapUserRepository ldapUserRepository;
@Mock
private LdapTemplate ldapTemplateMock;
Email email = new Email("abcd@xyz.com");
User user = new User(email);
static final String PASSWORD = "VGVzdEAxMjM=";
@Test
public void ldapTemplateQueryTest() {
LdapUser ldapUser = new LdapUser(user, PASSWORD.toCharArray());
List<LdapUser> users = new ArrayList<>();
users.add(ldapUser);
lenient()
.when(ldapTemplateMock.find(Mockito.any(), Mockito.eq(LdapUser.class)))
.thenReturn(users);
Mono<Boolean> locked = ldapUserRepository.checkIfAccountLocked(email);
StepVerifier.create(locked).expectNext(true).verifyComplete();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.