gpt4 book ai didi

java - PowerMockito 正在调用真实方法而不是模拟私有(private)方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:09 28 4
gpt4 key购买 nike

我有一个类,它有一个私有(private)方法并在其主体中调用另一个私有(private)方法。所以我想调用第一个私有(private)方法并模拟第二个。这是一个例子:

public class ClassWithPrivateMethod {

private int count;

public ClassWithPrivateMethod() {
}

private void countDown() {
while (isDecrementable())
count--;
}

private boolean isDecrementable() {

throw new IllegalArgumentException();
// if (count > 0) return true;
// return false;
}
}

和测试类:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithPrivateMethodTest.class)
public class ClassWithPrivateMethodTest {

private int count;
private ClassWithPrivateMethod classWithPrivateMethod;

@Before
public void setUp() throws Exception {
count = 3;
classWithPrivateMethod = PowerMockito.spy(new ClassWithPrivateMethod());
}

@Test
public void countDown() throws Exception {

Whitebox.setInternalState(classWithPrivateMethod, "count", count);
PowerMockito.doReturn(true, true, false).when(classWithPrivateMethod, "isDecrementable");

Whitebox.invokeMethod(classWithPrivateMethod, "countDown");

int count = Whitebox.getInternalState(classWithPrivateMethod, "count");

assertEquals(1, count);

PowerMockito.verifyPrivate(classWithPrivateMethod, times(3)).invoke("isDecrementable");
}
}

我通过 Whitebox.invokeMethod(classWithPrivateMethod, "countDown"); 调用了第一个私有(private)方法,然后像这样模拟第二个方法,PowerMockito.doReturn(true, true, false).when( classWithPrivateMethod, "isDecrementable");.如您所见,isDecrementable 方法在调用时应返回 truetruefalse 值,但 PowerMockito 正在调用真正的方法.

我正在使用这些依赖项:

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.19</version>
</dependency>

我的测试有什么问题?

最佳答案

我发现这一行有错误:

@PrepareForTest(ClassWithPrivateMethodTest.class)

应该是:

@PrepareForTest(ClassWithPrivateMethod.class)

关于java - PowerMockito 正在调用真实方法而不是模拟私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42018713/

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