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

标签 java junit mockito powermock spring-test

我在注入(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/

相关文章:

java - 忽略争论

java - 将图像文件存储到 Google Cloud Storage Bucket 后,它会显示所有大小为 "0 bytes"的文件的列表

java - 如何从表模型中获取选定的行?

java - JUnit:使用不同的配置运行一个测试

java - 如何测试多个服务调用

maven - 如何增加 Ant 永久元的大小?

java - mockito.when 返回 null 值

java - 谷歌数据流: Read unbound PCollection from Google Cloud Storage

java - JPA CriteriaBuilder 泛型错误 : CriteriaQuery<capture#2-of ? > 不适用于参数 (Expression<Long>)

java - Mockito:模拟一个操作输入数组参数的方法