当前位置: 首页 > 知识库问答 >
问题:

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

宇文和同
2023-03-14

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

public class foo {
    @Autowired
    fooBean fooBean;

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

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

当我用power mockito创建一个UT类时,foo类应该是@injectMocks,因为foBean应该作为模拟类注入。但是当foo类被标记为@injectMocks时,它不能像“do返回”(“xxx”)那样模仿它的私有方法。当(foo,“方法2”)时,它会引起关于这不能应用于injectMocks的错误。

它被封锁了。不知道如何继续。

共有1个答案

邵俊才
2023-03-14

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

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

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

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

 类似资料:
  • 我正在SpringMVC上使用Mockito进行JUnit测试。测试使用@InjectMock和@Mock with when(方法(…)。然后返回(X)。问题是如何在@Inject实例中@Mock方法? 我尝试过创建两个实例,例如@InjectMocks Foo foInstance和@Mock Foo foInstanceMock;我的思维方式是区分注入什么实例和嘲笑什么实例。我也尝试使用间谍

  • 例如,我有处理程序: 但是当我试图模拟它时,它实际上调用。如何使用来模拟它的方法?

  • 我正在尝试使用JaCoCo生成代码覆盖率报告。我的公司明确规定我必须只使用JaCoCo。不幸的是,有一个测试用例,我需要使用PowerMock来模拟私有方法。所以我必须使用@PREareFor注释和@RunBy(PowerMockRunner.class)注释。当我尝试使用gradle干净构建JacocoTestReport在gradle中生成报告时,由于注释,代码覆盖率不涵盖此测试用例。有解决方

  • 我有一门课看起来像这样: 我想使用Mockito和Powermock为此编写一个单元测试。我知道我可以这样模仿私有方法: 但是我如何告诉它抛出异常呢?我知道会是这样的: 那里有什么? 请注意,异常是一个私有内部类,因此我不能只执行,因为从单元测试中无法访问。

  • 克拉斯托斯特。publicMethod-->classtotest.privateMethod(不是mocking)-->classtoinject.publicMethod1(想要mock) 类如下所示