pet*_*ndr 5 java unit-testing mockito
我有方法:
public void loadPlatformDependencies() {
try {
dependenciesRepository.deleteAll();
dependenciesRepository.saveAll(pullLastDependencies());
publisher.publishEvent(new LoadedDependenciesEvent());
} catch (Exception e) {
LOGGER.error("Failed to load dependencies", e);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试测试它:
@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());
}
Run Code Online (Sandbox Code Playgroud)
但有一个问题,该方法 pullLastDependency() 现在工作不正确。我有一个错误:
Invalid use of argument matchers!
0 matchers expectd, 1 recorded:
Run Code Online (Sandbox Code Playgroud)
方法 pullLastDependency() 返回列表。我可以在没有正常工作的方法 pullLastDependency() 的情况下测试此方法吗?或者也许我应该以另一种方式测试这个方法?
您正在使用 captorwhen()而不是verify()。并且您正在从模拟方法返回 any()(这只是null),而不是返回您希望该模拟返回的内容。如果你不关心它返回什么,因为你不使用它,那么返回一个空的迭代。
它应该是
when(dependenciesRepository.saveAll(any()).thenReturn(Collections.emptyList());
puller.loadPlatformDependencies();
verify(dependenciesRepository).deleteAll();
verify(dependenciesRepository).saveAll(captor.capture());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |