我有以下代码结构
pkg a
public class TypeA {
@Resource
protected Resource resource
//other members and methods
}
pkg a
public class TypeB extends TypeA {
public void doSomething() {
resource.methodCall();
}
}
我正在尝试使用powermockito为mockB编写单元测试,为方法doSomething()编写mockito。我需要模拟对resource.methodCall()的调用,但不知道该怎么做。 目前无法更改TypeA或TypeB的代码
答案 0 :(得分:1)
这里有三个选项:
答案 1 :(得分:1)
如果您有不同的软件包,我建议使用getResource()
方法在测试中覆盖:
pkg a
public class TypeA {
@Resource
protected Resource resource
// for unit tests only
public Resource getResource() {
return resource;
}
}
pkg a
public class TypeB extends TypeA {
public void doSomething() {
getResource().methodCall();
}
}
在测试中,您覆盖getResource()
方法以返回模拟实例:
@Test
public void testDoSomething() {
Resource mockedResource = Mockito.mock(Resource.class);
TypeB typeB = new TypeB() {
@Override
Resource getResource() {
return mockedResource;
}
}
typeB.doSomething();
// verify what you need
}