@WebMvcTest Нет подходящего бина репозитория типов - PullRequest
0 голосов
/ 19 октября 2018

Я пишу тест контроллера, где контроллер выглядит как

@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 с?

1 Ответ

0 голосов
/ 19 октября 2018

Вы указали

@WebMvcTest(VehicleController.class)

, что хорошо, однако вы можете найти некоторые bean-компоненты из других зависимостей, такие как пользовательская UserDetailsService, некоторая пользовательская проверка или @ControllerAdvice, которые также выводятсяв.

Вы можете исключить эти бины, используя исключить фильтры .

@WebMvcTest(controllers = VehicleController.class, excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = CustomUserDetailsService.class)
...