【问题标题】:Adding the class for which Junit is written in @PrepareForTest makes a Zero coverage in sonar添加在 @PrepareForTest 中为其编写 Junit 的类会在声纳中实现零覆盖
【发布时间】:2017-06-01 05:27:37
【问题描述】:

样品控制器

public class SampleController {

    public void sampleMethod() {
    ClassAbc classAbc = new ClassAbc();
    classAbc.abcMethod();
    //doStuff
    }
}

类Abc

public class ClassAbc {
    public void abcMethod() {
    //doStuff
    }
}

SampleController 的 Junit

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@PrepareForTest({SampleController.class})
public class SampleControllerTest {

    @Autowired
    SampleController sampleController;

    public void setUp() {
        ClassAbc classAbc = PowerMockito.mock(ClassAbc.class);
        PowerMockito.whenNew(ClassAbc.class).withAnyArguments()                                                                                                           
                                          .thenReturn(classAbc);
        doNothing().when(classAbc).abcMethod();
    }

    @Test
    public void testsampleMethod() throws Exception {
        sampleController.sampleMethod();
    }
}

当我在@PrepareForTest 中添加“SampleController.class”时,即:

@PrepareForTest({SampleController.class})

我在运行 Sonar 作业时遇到以下违规情况。

14 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.

那是我对该类的覆盖率为零。

如果有必要将调用构造函数的类而不是正在构造的类放入@PrepareForTest注解中。

或者有人可以找到我解决声纳违规的解决方案。 提前致谢

【问题讨论】:

标签: java junit sonarqube jacoco powermockito


【解决方案1】:

PowerMockito wiki中所述:

...现在没有办法将 PowerMock 与 JaCoCo On-the-fly 仪表一起使用。 ... 使用 JaCoCo 获得代码覆盖率 - 使用离线仪器 ... 您可以在我们的存储库中找到将 PowerMock 与 JaCoCo Offline Instrumentation 和 Maven 结合使用的示例:jacoco-offline example

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2016-10-21
    • 2016-12-23
    • 2013-06-03
    • 1970-01-01
    • 2021-09-10
    • 2016-05-24
    • 2013-10-13
    • 2018-05-05
    相关资源
    最近更新 更多