我在注入(inject)的模拟注释类中遇到有关模拟私有(private)方法的问题。我的代码如下
public class foo {
@Autowired
fooBean fooBean;
public void method1() {
this.method2();
}
private void method2() {
fooBean.someMethod();
system.out.println("Hello world");
}
}
当我使用 powermockito 创建一个 UT 类时,foo 类应该是@injectMocks,因为 fooBean 应该作为模拟类注入(inject)。但是当 foo 类被标记为 @injectMocks 时,它不能使用类似“doReturn("xxx").when(foo,"method2")"的方法来模拟它的私有(private)方法,它会引发关于 this cannot be applied to 的错误注入(inject)模拟。
它被阻止了。不知道如何继续。
最佳答案
TLDR;您不能使用 InjectMocks 模拟私有(private)方法。
您应该模拟实现细节并关注应用程序的预期行为。同样重要的是,私有(private)方法不会在您的 Java 项目中执行核心测试逻辑。
专注于编写函数,以便测试不受私有(private)方法的阻碍。如果不可能,那么值得一问的是,私有(private)方法的作用是什么对您的功能如此有值(value),以及为什么它必须是私有(private)的。
还有其他方法可以测试私有(private)方法 - 您可以使用 Reflections java library ,这将使您可以在运行时停止方法并将特定值注入(inject)其中。但是,同样,这是为一个不需要存在的问题找到解决方案。
关于java - 如何在java中的injectmocks注释类下模拟私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64565726/