[英]Mocking static method in Java
有没有办法在不执行方法实际实现的情况下模拟 Java 中的单元测试静态方法? 实际实现启动了在单元测试上下文中无法完成的过程。
public class MyExecutor {
public static int execute(...) {
Process pr = Runtime.getRuntime().exec(...)
int status = pr.waitFor();
return status;
}
public MyClass {
public void methodToUnitTest(...){
MyExecutor.execute(...)
}
我想模拟 MyExecutor.execute 并在单元测试 MyClass.methodToUnitTest 但没有实际执行此方法时验证其调用及其参数。
我读到 PowerMockito 可以模拟静态方法,但它不会阻止实际实现的执行。
将静态类MyExecutor
在非静态类中。 将新的非静态类的方法提取到接口中。 使用接口替换静态类的依赖项 - 使用依赖项注入为MyClass
提供MyExecutor
实例:
public MyExecutorAdapter implements Executor{
public void execute() {
MyExecutor.execute() //call to static code
}
}
public MyClass {
private Executor myExecutor;
public MyClass(Executor myExecutor){ //MyExecutorAdapter instance can be injected here
this.myExecutor = myExecutor;
}
public void methodToUnitTest(...){
myExecutor.execute(...)
}
}
现在,使用该接口,您可以轻松模拟或提供用于测试目的的虚假实现。 在您的情况下,您可能需要有一个模拟来检查是否调用了execute
方法。
这基本上被称为Adapter pattern
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.