java - 无法在测试类中使用 Autowired,但可以在实现类中使用它?

标签 java spring spring-boot autowired spring-boot-test

我正在尝试测试一个 @Controller 类,其中有一个来自 pojo 的列表。 我可以在另一个 @RestController 类中使用 @Autowired 来连接 Controller ,但在同样的情况下,我无法将其放入测试中。

User.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() {
        ...
    }

}

错误消息是无法 Autowiring 。找不到“UserController”类型的 bean。

有什么想法吗?

提前致谢!

最佳答案

简单但不太好 - 将注释 @ComponentScan 添加到 UserTest 类

关于java - 无法在测试类中使用 Autowired,但可以在实现类中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60966728/

相关文章:

java - 从文本文件中读取 JSON

java - method.invoke在java中创建一个新线程吗?

java - 响应返回给客户端后清理

spring-boot - Kubernetes与Spring Boot变量解析冲突

java.sql.SQLSyntaxErrorException : user lacks privilege or object not found in ubuntu

java - Swing:按钮上方的自动调整文本大小?

java - 在 Maven 中设置 selenium-java 依赖项,但 Selenium 要求提供驱动程序的路径

java - Spring 3 和 Hibernate 4 道

java - 需要 Spring Boot CLIENT_PLUGIN_AUTH

spring-boot - 更正应用程序的类路径,使其包含 org.elasticsearch.common.logging.Loggers 的单个兼容版本