不能在测试中使用 Autowired class 但可以在实现中使用它 class?
Cannot use Autowired in a test class but able to use it in an implementation class?
我正在尝试测试一个@Controller class,其中有一个来自 pojo 的列表。
我可以在另一个 @RestController class 中使用 @Autowired 来连接控制器,但在同样的情况下我不能将它做成测试。
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);
}
}
在下class,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);
}
}
不过进入测试classUserTest.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' 类型的 bean。
有什么想法吗?
提前致谢!
简单但不是很好 - 添加注解 @ComponentScan 到 UserTest class
我正在尝试测试一个@Controller class,其中有一个来自 pojo 的列表。 我可以在另一个 @RestController class 中使用 @Autowired 来连接控制器,但在同样的情况下我不能将它做成测试。
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);
}
}
在下class,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);
}
}
不过进入测试classUserTest.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' 类型的 bean。
有什么想法吗?
提前致谢!
简单但不是很好 - 添加注解 @ComponentScan 到 UserTest class