Я немного запутался с аннотациями @RunWith(MockitoJUnitRunner.class)
и @InjectMock
и тем, как они связаны друг с другом. Согласно моему пониманию, давая @RunWith(MockitoJUnitRunner.class)
, нам не нужно инициализировать макет, как mock(ABC.class)
.
С другой стороны, @InjectMocks
автоматически вводит макет с помощью геттеров и сеттеров. В документации сказано:
@InjectMocks
в настоящее время он поддерживает только инъекцию сеттера. Если вы предпочитаете инъекцию в конструктор - пожалуйста, добавьте патч ....
Чего я не понимаю, так это того, что когда я удаляю @InjectMocks
ниже, я получаю исключение nullpointer для тестов, поскольку зависимость равна нулю Означает ли это, что поддержка на основе construtor поддерживается? Или это как-то связано с @RunWith(MockitoJUnitRunner.class)
Вот код
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Mock
private Dependency dependency;
@InjectMocks
private MyClass cls = new MyClass(dependency);
//...
}
class MyClass {
private Dependency dependency;
MyClass(Dependency dependency) {
this.dependency = dependency;
}
//...
}