如何在 java 中注释 class 的 injectmocks 下模拟私有方法

how to mock a private method under a injectmocks annotated class in java

我在注入的模拟注解 class 中遇到了关于模拟私有方法的问题。我的代码如下

public class foo {
    @Autowired
    fooBean fooBean;

    public void method1() {
        this.method2();
    }

    private void method2() {
        fooBean.someMethod();
        system.out.println("Hello world");
    }
}

当我使用 powermockito 创建 UT class 时,foo class 应该是 @injectMocks,因为 fooBean 应该作为 mock class 注入。但是当 foo class 被标记为 @injectMocks 时,它不能使用像“doReturn("xxx").when(foo,"method2")" 来模拟它的私有方法,它会引发关于这个的错误不适用于 injectMocks。

被屏蔽了。不知道如何继续。

TLDR;您不能使用 InjectMocks 模拟私有方法。

您应该模拟实现细节并关注应用程序的预期行为。同样重要的是,私有方法不在您的 java 项目中执行核心测试逻辑。

专注于编写函数,以便测试不受私有方法的阻碍。如果不可能,值得一问的是,私有方法的作用是什么对您的功能如此有价值,以及为什么它必须是私有的。

还有其他方法可以测试私有方法 - 您可以使用 Reflections java library,这可以让您在运行时停止方法并向其中注入特定值。但是,同样,这是在寻找一个不需要存在的问题的解决方案。