问题描述
我在注入的模拟注解类中遇到有关模拟私有方法的问题。我的代码就像下面的
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应该作为模拟类注入。但是,当foo类标记为@injectMocks时,无法使用“ doReturn(“ xxx”)。when(foo,“ method2”)“”来模拟其私有方法,这将引发错误,无法应用于injectMocks。
已被阻止。不知道如何继续。
解决方法
TLDR;您不能使用InjectMocks模拟私有方法。
您应该模拟实现细节,并专注于应用程序的预期行为。同样重要的是,私有方法不要在Java项目中执行核心测试逻辑。
着重编写函数,以使测试不受私有方法的阻碍。如果不可能的话,值得问一下私有方法在做什么,这对您的功能如此重要,以及为什么必须私有。
还有其他测试私有方法的方法-您可以使用Reflections java library,这可以让您在运行时停止方法并将特定的值注入其中。但是,这再次是为不需要存在的问题找到解决方案。