Создание унитарных тестов в Spring 3 - PullRequest
7 голосов
/ 07 апреля 2011

Я начинаю тестировать приложения в целом и хочу создать несколько тестов для изучения Mockito весной.Я читал несколько информации, но у меня есть некоторые общие сомнения, которые я хотел бы спросить.

  1. Я видел, что идут тесты Mockito, и они аннотируют тест класса с помощью: @ RunWith(MockitoJUnitRunner.class) , тогда как в документации Spring он используется @ RunWith (SpringJUnit4ClassRunner.class) .Я не знаю, в чем разница между ними, и какую мне следует использовать для приложения Spring, где в тестах используется Mockito.
  2. Поскольку я не видел ни одного реального приложения, в котором есть тесты, я хотел бы знать типичныепроверить, что разработчик сделает.Например, в типичном приложении CRUD для пользователей (пользователи могут быть созданы, обновлены ...) может любой обычный тест, что это будет сделано.

Спасибо.

1 Ответ

14 голосов
/ 07 апреля 2011
@RunWith(MockitoJUnitRunner.class)

С этим объявлением вы должны написать модульный тест . Модульные тесты проводят в едином классе, проверяя все зависимости Как правило, вы вставляете ложные зависимости, объявленные так в вашем тестовом примере:

@Mock
private YourDependency yourDependencyMock;

@RunWith(SpringJUnit4ClassRunner.class)

Spring Runner предназначен для интеграционного теста ( компонентный тест ?). В этом типе тестов вы выполняете целую группу классов, другими словами, вы тестируете один класс с реальными зависимостями (тестирование контроллера с реальными сервисами, DAO, базой данных в памяти и т. д.)

Вероятно, в вашем приложении должны быть обе категории. Хотя было бы неплохо иметь больше юнит-тестов и всего несколько тестов на интеграцию дыма, но я часто чувствовал себя более уверенно, когда писал почти только интеграционные тесты.

Что касается вашего второго вопроса, вы должны иметь:

  • модульные тесты для каждого класса (контроллера, служб, DAO) отдельно с проверенными всеми остальными классами

  • интеграционные тесты для всей одной операции CRUD. Например, создание пользователя, который управляет контроллером, службой, DAO и базой данных в памяти.

...