繁体   English   中英

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

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

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

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")" 来模拟它的私有方法,它会引发关于 this can't apply to注入模拟。

它被阻止了。 不知道如何继续。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM