Бобы в весеннем тесте - PullRequest
0 голосов
/ 18 марта 2020

У меня есть один пользовательский контроллер.

Пользовательский контроллер:

@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping("users")
public class UserRestController {

private final UserService userService;

public UserRestController(final UserService userService) {
    this.userService = userService;
}

@GetMapping()
public User getInfo(
        final @AuthenticationPrincipal UserDetails userDetails
) {
    return userService.findByUsername(userDetails.getUsername());
}

@PutMapping()
public User update(
        final @AuthenticationPrincipal UserDetails userDetails,
        final @RequestBody User user
) {
    User userInSystem = userService.findByUsername(
            userDetails.getUsername()
    );
    return userService.update(user, userInSystem);
}
}

Я провожу некоторые проверки для него.

Тест Пользовательский контроллер:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationArguments.class)
@Configuration // this annotation can be removed, the error will remain the same
@EnableAutoConfiguration //previous comment
public class TestUserRestController {

@Autowired
private UserRestController userRestController;

@Test
public void Test() {
    assertThat(userRestController).isNotNull();
}
}

И, наконец, у меня возникает ошибка при запуске теста:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента с именем com.daniil.ostrouh.notes. TestUserRestController ': неудовлетворительная зависимость, выраженная через поле' userRestController '; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'com.daniil.ostrouh.notes.rest.UserRestController': ожидается как минимум 1 компонент, который считается кандидатом на автопровод. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)}

Скажите, пожалуйста, что я делаю неправильно

Обновления Структура проекта: Структура проекта

1 Ответ

0 голосов
/ 18 марта 2020

Каждое стандартное приложение Spring Boot должно иметь производственный класс, аннотированный аннотацией @SpringBootApplication. Эта аннотация многое делает, в том числе сигнализируя Spring о root компонентного сканирования. Сканирование компонентов используется для автоматического обнаружения бобов Spring (@Component, @RestController, et c). @SpringBootTest пытается автоматически определить, что класс classes, если оставить его пустым. Если classes имеет какое-либо значение, тогда контекст Spring будет содержать только указанные классы (в данном случае ApplicationArguments, который здесь ничего не делает).

Поэтому вы должны удалить classes из @SpringBootTest и ваши пакеты должны быть структурированы в иерархии, поскольку компонент сканирования использует эту иерархию. Если вам нужна дополнительная помощь, пожалуйста, опубликуйте свой проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...