java - Mockito java - 模拟第三方实用方法和私有方法调用
问题描述
我有一个遗留代码,其中有一些方法如下:
public void display(String fileName, Path path){
//do some stuff
Files.exists(path);
if(null==privateMethod(fileName))
//something
}
private Object privateMethod(String fileName){
// do something
return object;
}
我正在为显示方法编写测试(使用 mockito)。我如何绕过像 Files.exists(path) 和内部私有方法调用这样的调用,因为我认为普通的存根不能与私有方法一起使用(可见性问题)。由于 Files.exists() 是实用方法,因此无法模拟。我是否需要在测试方法中实际创建一些测试文件并可能删除它们?或者有没有更好的清洁方法。我也搜索了私有方法测试 - 每个人都建议我不允许使用的 powermock。无论如何,我不需要测试私有方法,而是绕过/存根他们的调用返回。
解决方案
在这种情况下,有一些文件进行测试是有意义的。您可以在文件夹src/test/resources中生成或预先创建它们。
例如,测试可能如下所示:
@Test
public void myTest(){
// MyFile.txt is in src/test/resources
Path path = Paths.get("src","test","resources");
service.display("MyFile.txt", path);
// Asserts..
}
关于模拟私有方法,一般不推荐,因为您的测试将取决于您的类的实现细节,所以我强烈反对。此外,如果您不被允许使用Powermock
它可能根本不可能。
但是还有其他选择,例如,如果私有方法使用一些外部服务或库,那么您可以模拟它们而不是整个方法。这个想法是模拟类所依赖的外部实体,而不是类本身的一部分。
推荐阅读
- python - / 不支持的操作数类型:“str”和“str” PandasDataframe 中的操作错误
- bash - 在 macOS 上使用 FreeFileSync 和 Visual Studio Code 进行文件比较
- python - 将值添加到空列表中
- powershell - 如何在文本文件中使用 shell 命令将 / 替换为 \
- python - 如何从 django 中的 azure blob 存储中获取图像文件?
- python - 使用python的高效文件浏览器
- typescript - 如何将返回类型映射到元组?
- mysql - 使用聚合时子查询返回多于 1 行
- python - 如何在字典中添加键?(来自现有数据)
- c# - UWP NavigationView:一个 NavigationViewItem 下的两个 View