У меня есть следующая структура:
@NoArgsConstructor
public abstract class GrandParent {
@Setter(onMethod = @_(@Inject)) private SomeClassA a;
@Setter(onMethod = @_(@Inject)) protected SomeClassB b;
public String doSomething() {
String varA = a.someAPICall();
String varB = b.someAPICall();
return varA + varB;
}
}
@RequiredArgsConstructor(onConstructor = @_(@com.google.inject.Inject))
public abstract class Parent extends GrandParent {
protected final SomeClassA a;
protected final SomeClassC c;
public String doSomething() {
String varA = a.someAPICall();
String varB = b.someAPICall();
String varC = c.someAPICall();
return varA + varB + varC;
}
}
public class Child extends Parent {
private final SomeClassD d;
@Inject
public Child(final SomeClassA a, final SomeClassC c, final SomeClassD d) {
super(a, c);
this.d = d;
}
public void doSomething() {
a.doWhatADoes();
b.doWhatBDoes();
}
}
Мой тест выглядит следующим образом:
@RunWith(MockitoJUnitRunner.class)
public class ChildTest {
@Mock
private SomeClassA a;
@Mock
private SomeClassB b;
@Mock
private SomeClassC c;
@Mock
private SomeClassD d;
@InjectMocks
private Child childMock;
@Test
public void testCase(){
when(a.doSomeThing()).thenReturn("A");
when(a.doSomeThing()).thenReturn("B");
childMock.doSomething();
verify(c, times(1)).doWhatCDoes();
}
}
При запуске теста с Mockito 2.0 и JUnit4 у меня нет проблем. Однако после перехода на Junit5 и использования винтажного движка Junit с mockito 2.28 я получаю null
макетов в классе GrandParent
. Из-за этих нулевых насмешек я получаю NullPointerException
там, где классы, введенные в GrandParent, используются в детях для вызова своих методов.
Я пытался создавать макеты с использованием BeforeClass
, а также без использования MockitoJUnitRunner
, но в GrandParent
макеты все равно заканчиваются нулями. Однако они становятся ненулевыми в дочернем классе. Я думаю, как-то, привязка к экземплярам GrandParent не происходит. Я что-то здесь упускаю?