我有一个抽象类,比如说MyClassA
,还有一个扩展它的类,比如说MyClassB
。
我已经在MyClassA
中(不是抽象的)介绍了使用单元测试的方法,然后运行它们,一切都变得绿色。
然后,在运行代码覆盖后,我看到显示的唯一覆盖的部分是MyClassA
的构造函数,这很奇怪,因为它是在测试类的@Before
部分中创建的。@Before
的MyClassBUnitTests
部分看起来像这样:
@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.如果您使用的是第一个-请注意测试不会调试。