我需要测试一个调用另一个私有(private)方法的方法,问题不是试图模拟私有(private)方法返回的结果,而是这样做不是为了获得jacoco或sonar的覆盖范围。我用 Powermock 和 EasyMock 进行了测试,但是当使用 spy 时,当使用 spy 时,声纳或 jacoco 不会覆盖测试。进行调用的私有(private)方法和公共(public)方法在同一个类中。
测试情况:
public class ClassOne {
private Object methodOne () {
.....
return object;
}
private Object mehodTwo () {
return Object name = mehtodOne ();
}
}
测试示例:
package foo.bar;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(VlcPlayerMinimal.class)
public class VlcPlayerMinimalTest {
@Test
public void getVlcRcStatusTest() {
VlcPlayerMinimal vlcPlayerSpy = PowerMockito.spy(new VlcPlayerMinimal());
try {
PowerMockito.doReturn("{status: stopped, id: 2}").when(vlcPlayerSpy, "executeGetRequest", Mockito.any(), Mockito.any());
String vlcRcStatus = vlcPlayerSpy.getVlcRcStatus();
System.out.println(vlcRcStatus);
} catch (Exception e) {
e.printStackTrace();
fail("Unexpected exception thrown.");
}
}
}
最佳答案
不,这是不可能的。选择一个或另一个。
这样的“报道”甚至能证明什么?你实际上并没有覆盖它。代码覆盖率是一种衡量标准,可帮助您识别未经过充分测试的点,而不是您应该试图欺骗使其显得比实际更高的点。
关于java - 是否可以模拟私有(private)方法的结果并同时获得声纳或 jacoco 的覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59927582/