java - 参数匹配器的使用无效。如果此方法使用另一种私有方法,我该如何测试它?
问题描述
我有方法:
public void loadPlatformDependencies() {
try {
dependenciesRepository.deleteAll();
dependenciesRepository.saveAll(pullLastDependencies());
publisher.publishEvent(new LoadedDependenciesEvent());
} catch (Exception e) {
LOGGER.error("Failed to load dependencies", e);
}
}
我尝试测试它:
@Test
public void testLoadPlatformDependencies() {
ArgumentCaptor<Iterable<Dependency>> captor = ArgumentCaptor.forClass(Iterable.class);
when(dependenciesRepository.saveAll(captor.capture())).thenReturn(any(Iterable.class));
puller.loadPlatformDependencies();
verify(dependenciesRepository,times(1)).deleteAll();
verify(dependenciesRepository, times(1)).saveAll(any(Iterable.class));
verify(publisher,times(1)).publishEvent(any());
}
但是有一个问题,该方法 pullLastDependencies() 现在工作不正确。我有一个错误:
Invalid use of argument matchers!
0 matchers expectd, 1 recorded:
方法 pullLastDependencies() 返回列表。我可以在没有正确工作的方法 pullLastDependencies() 的情况下测试此方法吗?或者也许我应该以另一种方式测试这种方法?
解决方案
您正在使用捕获器when()
而不是verify()
. 而且您正在从您的模拟方法返回 any()
(只是null
),而不是返回您希望此模拟返回的内容。如果您因为不使用它而不关心它返回的内容,则返回一个空的可迭代对象。
它应该是
when(dependenciesRepository.saveAll(any()).thenReturn(Collections.emptyList());
puller.loadPlatformDependencies();
verify(dependenciesRepository).deleteAll();
verify(dependenciesRepository).saveAll(captor.capture());