是否可以模拟私有方法的结果并同时获得声纳或 jacoco 的覆盖?
Is it possible to mock the result of a private method and at the same time obtain coverage in sonar or jacoco?
我需要测试调用另一个私有方法的方法,问题不是试图模拟私有方法的结果returns,而是这样做不是为了获得 jacoco 或 sonar 的覆盖.我用 Powermock 和 EasyMock 进行了测试,但是当使用间谍时,当使用间谍时,声纳或 jacoco 不涵盖该测试。调用的私有方法和public方法在同一个class.
要测试的情况:
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.");
}
}
}
不,这不可能。任选其一。
这样的 "coverage" 还能证明什么?你实际上并没有覆盖它。代码覆盖率是一种指标,可帮助您识别未经过充分测试的点,而不是您应该尝试欺骗使其看起来比实际更高的点。
我需要测试调用另一个私有方法的方法,问题不是试图模拟私有方法的结果returns,而是这样做不是为了获得 jacoco 或 sonar 的覆盖.我用 Powermock 和 EasyMock 进行了测试,但是当使用间谍时,当使用间谍时,声纳或 jacoco 不涵盖该测试。调用的私有方法和public方法在同一个class.
要测试的情况:
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.");
}
}
}
不,这不可能。任选其一。
这样的 "coverage" 还能证明什么?你实际上并没有覆盖它。代码覆盖率是一种指标,可帮助您识别未经过充分测试的点,而不是您应该尝试欺骗使其看起来比实际更高的点。