Подтвердить что ты не робот

В чем разница между Mockito.mock(SomeClass) и аннотацией @Mock?

В чем разница между методом Mockito.mock(Class<T> classToMock) и аннотацией @Mock? Они одинаковы?

Например, это:

private TestClass test = Mockito.mock(TestClass.class);

то же самое, что:

@Mock
private TestClass test;
4b9b3361

Ответ 1

Они оба добиваются того же результата. Использование аннотации (@Mock) обычно считается "более чистым", так как вы не заполняете свой код с помощью назначений шаблонов, которые выглядят одинаково.

Обратите внимание, что для использования аннотации @Mock ваш тестовый класс должен быть аннотирован с помощью @RunWith(MockitoJUnitRunner.class) или содержать вызов MockitoAnnotations.initMocks(this) в методе @Before.

Ответ 2

Разница в строках кода вам нужно написать:):):)

Серьезно, хотя использование аннотаций имеет тот же эффект, что и при использовании Mockito.mock.

Чтобы процитировать документацию MockitoAnnotations, использование аннотаций имеет следующие преимущества:

  • Позволяет сокращать создание объектов, необходимых для тестирования.

  • Сведение к минимуму повторяющегося кода создания фотки.

  • Делает класс теста более удобочитаемым.

  • Делает ошибку проверки легче читать, потому что имя поля - используется для идентификации макета.

javadoc для MockitoAnnotations здесь

Ответ 3

Оба они считаются одинаковыми и достигают того же, но я предпочел бы второй:

@Mock - это аннотация, которая:

  • Сведение к минимуму повторяющегося кода создания кода.
  • Делает класс теста более удобочитаемым.
  • Позволяет сокращать создание объектов, необходимых для тестирования.

Ответ 4

Есть два важных преимущества использования аннотации.

  • Макет, созданный с помощью @Mock, может быть введен в тестируемый класс с помощью аннотации @InjectMocks. Это мощный метод, который может значительно облегчить тестирование. Он просто не будет работать с mocks, созданным методом mock.
  • Если у вас есть ошибки, связанные с вашим макетом, в сообщении появится имя макета. Если вы использовали @Mock, то это имя будет просто именем поля. Это позволяет легко найти проблему макета.

Конечно, в дополнение к этим двум важным преимуществам большинство людей считают, что обозначение @Mock более читаемо, и оно сокращает количество кода. Я не вижу причин не использовать его.

Ответ 5

Ответ на вопрос - одна большая ошибка. Мы просто решили некоторые проблемы, вызванные Mockito.mock(Your.class) в качестве поля. У нас было несколько методов @Test. Четвертый метод выбрал исключение с помощью 'thenThrow (ex)'. Все методы @Test после сбоя и причина была вызвана исключением. Они делили насмешливый пример и условие "когда". После того, как мы изменили с

TestClass testInstance = Mockito.mock(TestClass.class);

к

@Mock
TestClass testInstance;

все начало работать так, как ожидалось. Таким образом, Mockito.mock создает общий макет между методами тестирования, а @Mock - нет.