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

如果单例类本身正在使用PowerMock测试,如何模拟该类的私有方法?

岳刚洁
2023-03-14

如果我正在为一个单例类编写单元测试,那么我如何去模仿单例类的私有方法。下面是我正在寻找的场景的示例代码片段:-

Class Singleton {
   private static Singleton instance = new Singleton();

   protected Singleton() {}
   public Singleton synchronized getInstance() { return instance;}

   public int method1(int a) {
       int ret = method2(a);
       return ret;
   }

   private int method2(int num) { return num + 1;}
}

我如何模拟method2,以便在上面的示例中测试method1?

共有1个答案

松兴邦
2023-03-14

要测试method1,只需像测试任何其他方法一样测试它。在本例中被测试的对象Singleton类不应该被模仿。

通常在设置方法中创建一个测试对象,即测试中的类(testee),然后:

@Test
public void testMethod1() {
    int testValue = 1;      
    int expectedResult = 2;

    assertThat(testee.method1(testValue), equalTo(expectedResult));
}

在上面的示例中,我将使用参数化测试,比如JUnitParams来测试边界,例如整数MAX_VALUE等。

@Test
@Parameters(method = "method1Params")
public void testMethod1(int testValue, int expectedResult) {
    assertThat(testee.method1(testValue), equalTo(expectedResult));
}

@Ignore
private final Object[] method1Params() {
    return new Object[] {
        new Object { 1, 2 },
        new Object { -2, -1 }
    };
}
public int method1(DependedOnComponent doc) {
    int a = 1;

    int ret = doc.method2(a);

    return ret;
}
@Test
public void testMethod1() {
    DependedOnComponent mockDOC = mock(DependedOnComponent.class);

    // When method2() is called you control the value returned
    when(mockDOC.method2(1)).thenReturn(2);

    assertThat(testee.method1(mockDOC), equalTo(2));
}
 类似资料:
  • 下面是从测试中的类调用的类的代码示例 所以我的问题是如何成功地模拟CodeWithAnotherPrivateMethod类的doTheGamble()方法,使其始终返回true?

  • 问题内容: 我有一个名为Java的Java类,我想用JUnit进行测试。我要测试的公共方法调用同一类中的私有方法,以确定要遵循的条件路径。我的目标是为中的不同路径编写JUnit测试。另外,调用服务,因此我不希望在运行JUnit测试时实际执行该服务。 模拟和控制其返回值以便我可以测试“ methodA”的不同路径的最佳方法是什么? 我更喜欢在编写模拟时使用JMockit,因此我对适用于JMockit

  • 我正在尝试测试下一种方法: 称为PrivateMethod: asyncTask的执行无法在Mockito的测试中完成,所以我需要以某种方式模拟它。我试着用PowerMock来嘲弄私有方法: 这在PowerMockito行(NullPointerException)中给了我一个异常,它说 方法引发了“org.mockito.exceptions.Misusing.UnfinishedStubbin

  • 我想现在,如果有可能模仿一个类一样 我们的业务逻辑在代码中的某个地方用< code>new myClass()创建了这个对象,因此我不能访问创建的对象来模拟这些方法。有没有办法替换整个类或者覆盖那些方法。我正在使用mockito,我只找到了这样做的例子 我们不能使用 PowerMock,因为它与我们的测试环境不兼容。 欢迎任何建议。

  • 我这样做是为了得到想要的结果

  • 问题内容: 如何模拟使用PowerMock进行测试的专用方法?我有一个类,我想使用一个调用私有方法的公共方法进行测试。我想假设私有方法可以正常工作。例如,我想要类似的东西。我发现有使用PowerMock的解决方案,但该解决方案对我不起作用。怎么做?有人有这个问题吗? 问题答案: 我在这里没有问题。使用Mockito API的以下代码,我做到了: 这是JUnit测试: