摘要 class 的 Jacoco 代码覆盖率部分显示

Jacoco code coverage for abstract class partly shows up

我有一个摘要 class,比方说 MyClassA,还有一个扩展它的 class,比方说 MyClassB。 我已经用单元测试覆盖了 MyClassA(不是抽象)中的一个方法,运行 它们,一切都是绿色的。 然后在我 运行 代码覆盖之后,我看到唯一显示的覆盖部分是 MyClassA 的构造函数,这很奇怪,因为它是在测试的 @Before 部分创建的 class.

MyClassBUnitTests@Before 部分看起来像这样:

@Before
public void setUp() throws Exception {
   Context applicationContext = mock(Context.class);
   MemberModifier.stub(MemberMatcher.method(MyClassB.class,
                    "someFunction")).toReturn(null);
   classBInstance = new MyClassB(applicationContext, ...); 
   //calls the constructor of MyClassA through super()
}

@Test 部分类似于:

 @Test
 public void someTest() throws Exception {
    classBInstance = spy(classBInstance);
    MemberModifier.field(MyClassB.class, "somefield").set(classBInstance, someFieldStub);
    classBInstance.methodToTest();
    // actually calls a method implemented in MyClassA
}

是的,我尝试调用 MyClassA 上的所有存根和修饰符,相同。

结果我不得不使用

@Rule public PowerMockRule mPowerMockRule = new PowerMockRule();

测试内部 class 而不是

@RunWith(PowerMockRunner.class)

注释。虽然不知道为什么。

P. S. 如果您使用的是第一个 - 请注意测试不会调试。