@RunWith(MockitoJUnitRunner.class)
С этим объявлением вы должны написать модульный тест . Модульные тесты проводят в едином классе, проверяя все зависимости Как правило, вы вставляете ложные зависимости, объявленные так в вашем тестовом примере:
@Mock
private YourDependency yourDependencyMock;
@RunWith(SpringJUnit4ClassRunner.class)
Spring Runner предназначен для интеграционного теста ( компонентный тест ?). В этом типе тестов вы выполняете целую группу классов, другими словами, вы тестируете один класс с реальными зависимостями (тестирование контроллера с реальными сервисами, DAO, базой данных в памяти и т. д.)
Вероятно, в вашем приложении должны быть обе категории. Хотя было бы неплохо иметь больше юнит-тестов и всего несколько тестов на интеграцию дыма, но я часто чувствовал себя более уверенно, когда писал почти только интеграционные тесты.
Что касается вашего второго вопроса, вы должны иметь:
модульные тесты для каждого класса (контроллера, служб, DAO) отдельно с проверенными всеми остальными классами
интеграционные тесты для всей одной операции CRUD. Например, создание пользователя, который управляет контроллером, службой, DAO и базой данных в памяти.