Не можете использовать Autowired в тестовом классе, но можете использовать его в классе реализации? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь протестировать класс @Controller, где есть список из pojo. Я могу использовать @Autowired в другом классе @RestController для подключения контроллера, но в той же ситуации я не могу сделать это в тесте.

Пользователь. java

@Data //from lombok
public class User  {
    private String Id;
    private String email;

    //constructor + getters and setters
}

UserContrell3. java

@Controller
public class UserController {

    private List<User> userRepo = new ArrayList<>();

    public UserController() {}

    public List<User> readAll() {
        return userRepo;
    }

    public void add(User user) {
        userRepo.add(user);
    }
}

В следующем классе UserResource. java Я могу сделать @Autowired

@RestController
@RequestMapping(UserResource.USER)
public class UserResource {
    public static final String USER = "/users";

    private UserController userController;

    @Autowired
    public UserResource(UserController userController) {
        this.userController = userController;
    }

    @GetMapping
    public List<User> readAll() {
        return userController.readAll();
    }

    @PostMapping
    public void addUser(@RequestBody User user) {
        userController.add(user);
    }
}

Однако в тестовый класс UserTest. java. Я не могу:

@SpringBootTest(classes = {cat.jhz.Main.MainApp.class})
@TestPropertySource("classpath:test.properties")
public class UserTest {

    // @Autowired **//NOT HERE** --> ERROR
    private UserController userRepo;

    @Autowired **//AND NOT HERE** --> ERROR
    public UserResource(UserController userController) {
        this.userController = userController;
    }

    @Test
    void testAddUserToUserController() {
        ...
    }

}

Сообщение об ошибке: Не удалось выполнить автоматическое подключение. Бины типа 'UserController' не найдены.

Есть идеи?

Заранее спасибо!

1 Ответ

1 голос
/ 01 апреля 2020

Просто, но не так здорово - добавьте аннотацию @ComponentScan в класс UserTest

...