gpt4 book ai didi

java - 如果单例类本身正在使用 PowerMock 进行测试,如何模拟该类的私有(private)方法?

转载 作者:行者123 更新时间:2023-12-01 12:29:05 25 4
gpt4 key购买 nike

如果我正在为 Singleton 类编写单元测试,那么我该如何模拟 Singleton 类的私有(private)方法。我正在寻找的场景的示例代码片段如下:-

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;}
}

如何模拟方法2以测试上面示例中的方法1?

最佳答案

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

创建一个测试对象,即您的被测类(被测试者),通常在设置方法中创建:

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

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

在上面的示例中,我将使用 JUnitParams 之类的参数化测试来测试边界,例如 Integer 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 }
};
}

模拟主要用于测试 SUT 时,在本例中,单例与其他组件(协作者)隔离,以确保其行为正确。在这种情况下,没有必要。

什么时候可以使用模拟

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));
}

关于java - 如果单例类本身正在使用 PowerMock 进行测试,如何模拟该类的私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26097367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com