Mockito java - 模拟第三方实用程序方法和私有方法调用
Mockito java - mock third party utility methods and private method calls
我有一个遗留代码,其中包含如下一些方法:
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;
}
我正在为 display 方法编写测试(使用 mockito)。我如何绕过 Files.exists(path) 之类的调用和内部私有方法调用,因为我认为普通存根不能与私有方法一起使用(可见性问题)。由于 Files.exists() 是实用方法,因此不能被模拟。我是否需要在测试方法中实际创建一些测试文件并可能删除它们?或者有没有更好的清洁方法。我还搜索了有关私有方法测试的信息-每个人都建议我不允许使用 powermock。无论如何我不需要测试私有方法但是 bypass/stub 他们的调用 returns.
在这种情况下,有一些文件用于测试是有意义的。您可以在文件夹 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..
}
关于模拟私有方法,通常不推荐,因为您的测试将取决于您 class 的实现细节,所以我强烈反对。此外,如果不允许您使用 Powermock
,则可能根本不可能。
但是还有其他选择,例如,如果私有方法使用一些外部服务或库,那么您可以模拟它们而不是整个方法。这个想法是模拟 class 依赖的外部实体,而不是 class 本身的一部分。
我有一个遗留代码,其中包含如下一些方法:
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;
}
我正在为 display 方法编写测试(使用 mockito)。我如何绕过 Files.exists(path) 之类的调用和内部私有方法调用,因为我认为普通存根不能与私有方法一起使用(可见性问题)。由于 Files.exists() 是实用方法,因此不能被模拟。我是否需要在测试方法中实际创建一些测试文件并可能删除它们?或者有没有更好的清洁方法。我还搜索了有关私有方法测试的信息-每个人都建议我不允许使用 powermock。无论如何我不需要测试私有方法但是 bypass/stub 他们的调用 returns.
在这种情况下,有一些文件用于测试是有意义的。您可以在文件夹 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..
}
关于模拟私有方法,通常不推荐,因为您的测试将取决于您 class 的实现细节,所以我强烈反对。此外,如果不允许您使用 Powermock
,则可能根本不可能。
但是还有其他选择,例如,如果私有方法使用一些外部服务或库,那么您可以模拟它们而不是整个方法。这个想法是模拟 class 依赖的外部实体,而不是 class 本身的一部分。