java - 是否可以模拟私有(private)方法的结果并同时获得声纳或 jacoco 的覆盖?

标签 java junit java-8 mockito powermock

我需要测试一个调用另一个私有(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/

相关文章:

java - JUnit:是否可以在任何断言函数中输出多行消息?

java - 如何验证是否在被测系统上调用了方法(不是模拟)

java - 为什么使用 Swing 绘画在 Java 8 和 Java 6 中表现不同?

java - Java 8 的 Freemarker 问题

java - 如何在录制视频模式下进行人脸检测

java - 使用java将文件夹存储在文件中

java - 自动完成不匹配的结果

android - 尝试使用 PowerMockito stub android Activity 类抛出 RuntimeException "Stub!"

Java 8 Stream List<Foo> 到 Map<Date, Map<String,Long>> 与条件 groupingBy

java - Spring validator 抛出异常