У меня есть класс:испытания конкретный метод абстрактного класса, содержащего интерфейс вызова
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;
}
Но я получил исключение нулевого указателя на fooBarclient в doBar1().
Я также пытался издеваться аннотацию с:
Foo foo = Mockito.mock(Foo,Mockito.CALLS_REAL_METHODS);
Есть ли лучший способ сделать это испытание?
EDIT:
Я использовал отражение. Теперь код выглядит следующим образом:
@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;
}
Здравствуйте, моя проблема связана с внутренним вызовом. Не абстрактно. привет, –
Как вы устанавливаете 'foobarclient' в созданном вами экземпляре' foo'? Я не думаю, что бегун «Mockito» поддерживает аннотацию '@ Inject'. Либо установите его явно, либо используйте '@ InjectMocks' –
Я модифицировал' code' @Mock частный FoobarClient foobarClient; to @InjectMock. И я называю реализацию вместо интерфейса, но теперь Mockito.when (....) не совпадают. привет, –