В чем разница между методом Mockito.mock(Class<T> classToMock)
и аннотацией @Mock
?
Они одинаковы?
Например, это:
private TestClass test = Mockito.mock(TestClass.class);
то же самое, что:
@Mock
private TestClass test;
В чем разница между методом Mockito.mock(Class<T> classToMock)
и аннотацией @Mock
?
Они одинаковы?
Например, это:
private TestClass test = Mockito.mock(TestClass.class);
то же самое, что:
@Mock
private TestClass test;
Они оба добиваются того же результата. Использование аннотации (@Mock
) обычно считается "более чистым", так как вы не заполняете свой код с помощью назначений шаблонов, которые выглядят одинаково.
Обратите внимание, что для использования аннотации @Mock
ваш тестовый класс должен быть аннотирован с помощью @RunWith(MockitoJUnitRunner.class)
или содержать вызов MockitoAnnotations.initMocks(this)
в методе @Before
.
Разница в строках кода вам нужно написать:):):)
Серьезно, хотя использование аннотаций имеет тот же эффект, что и при использовании Mockito.mock.
Чтобы процитировать документацию MockitoAnnotations
, использование аннотаций имеет следующие преимущества:
Позволяет сокращать создание объектов, необходимых для тестирования.
Сведение к минимуму повторяющегося кода создания фотки.
Делает класс теста более удобочитаемым.
Делает ошибку проверки легче читать, потому что имя поля - используется для идентификации макета.
javadoc для MockitoAnnotations
здесь
Оба они считаются одинаковыми и достигают того же, но я предпочел бы второй:
@Mock - это аннотация, которая:
Есть два важных преимущества использования аннотации.
@Mock
, может быть введен в тестируемый класс с помощью аннотации @InjectMocks
. Это мощный метод, который может значительно облегчить тестирование. Он просто не будет работать с mocks, созданным методом mock
.@Mock
, то это имя будет просто именем поля. Это позволяет легко найти проблему макета.Конечно, в дополнение к этим двум важным преимуществам большинство людей считают, что обозначение @Mock
более читаемо, и оно сокращает количество кода. Я не вижу причин не использовать его.
Ответ на вопрос - одна большая ошибка. Мы просто решили некоторые проблемы, вызванные Mockito.mock(Your.class) в качестве поля. У нас было несколько методов @Test. Четвертый метод выбрал исключение с помощью 'thenThrow (ex)'. Все методы @Test после сбоя и причина была вызвана исключением. Они делили насмешливый пример и условие "когда". После того, как мы изменили с
TestClass testInstance = Mockito.mock(TestClass.class);
к
@Mock
TestClass testInstance;
все начало работать так, как ожидалось. Таким образом, Mockito.mock создает общий макет между методами тестирования, а @Mock - нет.