Получение нулевого макета при использовании инъекции на основе метода set в абстрактном классе в JUNIT5 + Mockito 2.28 - PullRequest
0 голосов
/ 28 января 2020

У меня есть следующая структура:

@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 не происходит. Я что-то здесь упускаю?

...