添加在@PrepareForTest中编写Junit的类会在声纳中进行零覆盖

时间:2017-01-17 08:28:36

标签: java junit sonarqube jacoco powermockito

样本控制器

public class SampleController {

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

ClassAbc

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

Junit for SampleController

@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.

那是Iam对该课程的覆盖范围为零。

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

或者有人可以找到我解决该Sonar违规行为的解决方案。 提前致谢

1 个答案:

答案 0 :(得分:1)

PowerMockito wiki中所述:

  

...现在没有办法使用带有JaCoCo实时仪器的PowerMock。   ...使用JaCoCo获取代码覆盖率 - 使用离线检测...   您可以在我们的存储库中找到将PowerMock与JaCoCo Offline Instrumentation和Maven一起使用的示例:jacoco-offline example