是否可以模拟私有方法的结果并同时获得声纳或 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" 还能证明什么?你实际上并没有覆盖它。代码覆盖率是一种指标,可帮助您识别未经过充分测试的点,而不是您应该尝试欺骗使其看起来比实际更高的点。