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

@BeforeMyClassBUnitTests部分看起来像这样:

@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();


在测试类中而不是

@RunWith(PowerMockRunner.class)


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

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

07-28 01:10
查看更多