Я пишу тест контроллера, где контроллер выглядит как
@RestController
public class VehicleController {
@Autowired
private VehicleService vehicleService = null;
...
}
Пока тестовый класс выглядит как
@RunWith(SpringRunner.class)
@WebMvcTest(VehicleController.class)
public class VehicleControllerTest {
@Autowired
private MockMvc mockMvc = null;
@MockBean
private VehicleService vehicleServie = null;
@Test
public void test() {
...
}
}
Когда я запускаю этот тест, он не работает со следующей ошибкой
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.database.repositories.SomeOtherRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Здесь SomeOtherRepository не используется в данном контроллере или службе.
Если я использую @MockBean для SomeOtherRepository, тест работает, но та же проблема возникает для остальных репозиториев.
@MockBean private SomeOtherRepository someOtherRepository = null
...
# Bunch of other repositories
В идеале мне не следует беспокоиться обо всех репозиториях, кроме того, который я использую. Что мне здесь не хватает? Как я могу избежать записи множества @MockBean?





Вы указали
@WebMvcTest(VehicleController.class)
что нормально, однако вы можете найти некоторые компоненты из других зависимостей, такие как настраиваемый UserDetailsService, некоторая настраиваемая проверка или @ControllerAdvice, которые также вносятся.
Вы можете исключить эти bean-компоненты, используя исключить фильтры.
@WebMvcTest(controllers = VehicleController.class, excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = CustomUserDetailsService.class)
Ваш VehicleService зависит от SomeOtherRepository, поэтому вам также придется издеваться над ним в своем тестовом классе. Попробуйте добавить:
@MockBean private SomeOtherRepository someOtherRepository
в вашем классе VehicleControllerTest.