如何在Java中的injectmocks注释类下模拟私有方法

问题描述

我在注入的模拟注解类中遇到有关模拟私有方法的问题。我的代码就像下面的

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,这可以让您在运行时停止方法并将特定的值注入其中。但是,这再次是为不需要存在的问题找到解决方案。