我有以下课程
class FileDownloader {
public static void downloadFile(String repoUrl, String filename) throws IOException {
// Downloads file from internet
}
}
class FileDownloaderAndProcessor {
public static void downloadAndProcessFile() throws IOException {
//run some processing to figure out what to download
FileDownloader.downloadFile(a, b);
//run various processing on downloaded file
}
}
我曾经用PowerMockito.doAnswer模拟FileDownloader,在那里我基本上可以通过将本地文件从一个位置复制到另一个位置来模拟downloadFiles函数,以模拟下载,然后对后处理运行各种测试
PowerMockito.doAnswer(invocation -> {
//copy from local location x to y depending on arguments
}.when(FileDownloader.class, "downloadFile").etc etc
由于最近的 Spring 升级,我们不能再使用powermock并且正在迁移到MockedStatic。但是,我在MockedStatic中没有看到doAnswer功能。我真的不希望测试需要互联网连接才能运行。我该如何模拟这个void方法呢?
Mockito版本:您可以使用以下代码:org.mockito:mockito核心:jar:4.0.0 org.mockito:mockito内联:jar:4.0.0
2条答案
按热度按时间ux6nzvsh1#
您可以在Mockito提供的
MockedStatic
上试用when...thenAnswer...
。qjp7pelc2#
因为所有的静态类似乎只有一个方法,所以可以简单地模拟整个类。
编辑:
只模仿类中的一个方法也可以通过一个简单的解决方案来实现。
不过我建议使用Kai-Sheng Yang提供的解决方案https://stackoverflow.com/a/72125083/10254476。这是mockito的缩进方式。我原来的简单方法只是简单,只要整个类都可以被模仿。
**始终记得调用
your_mocked_call.close();
,否则静态模拟即使在testClass完成后仍保持打开状态。