一个抽象类的具体方法我有一个类:测试包含接口调用
public abstract class Foo{
@Inject
private FooBarClient foobarclient;
public abstract long dofoo1();
public abstract long dofoo2();
public void doBar1(){
foobarClient.docall(faa);
}
}
我想测试doBar1()方法,所以我做了我的测试类是这样的:
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
private Foo foo;
@Mock
private FoobarClient foobarClient;
@Before
public void init() {
foo = new Foo() {
dofoo1(){};
};
}
@Test
public void testControleValiditeSite() throws Exception {
// G
Response response=....;
Mockito.when(foobarClient.docall(Mockito.any(faa.class))).thenReturn(
response);
// W
foo.doBar1();
// T;
}
但我得到了doBar1()中的fooBarclient的空指针异常。
我也试图嘲笑与抽象:
Foo foo = Mockito.mock(Foo,Mockito.CALLS_REAL_METHODS);
是否有更好的方法做这个测试?
编辑:
我用反射。现在,代码如下:
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
private Foo foo;
@Mock
private FoobarClient mockedFoobarClient;
@Before
public void init() {
foo = new Foo() {
dofoo1(){};
};
**MockitoAnnotations.initMocks(this);**
**ReflectionTestUtils.setField(foo , "foobarClient", mockedFoobarClient);**
}
@Test
public void testControleValiditeSite() throws Exception {
// G
Response response=....;
Mockito.when(foobarClient.docall(Mockito.any(faa.class))).thenReturn(
response);
// W
foo.doBar1();
// T;
}
你好,我的问题是在infaceface调用。不在摘要中。 问候, – 2014-10-30 13:05:52
你如何在你创建的'foo'实例中设置'foobarclient'?我不认为支持'@ Inject'注释的'Mockito'跑步者。要么明确地设置它,要么使用'@InjectMocks' – 2014-10-30 13:10:48
我修改了'code' @Mock private FoobarClient foobarClient;到@InjectMock。我调用实现而不是界面,但现在Mockito.when(....)不匹配。问候, – 2014-10-30 13:50:01