java - 通过单元测试中的字段“userService”表示不满足的依赖关系
问题描述
在 Spring Boot 应用程序中,我有一个AuditorAwareInterface
使用@Autowired
userService
.
它看起来像:
@Configuration
public class AuditorAwareConfiguration {
@Bean
public AuditorAware<Long> auditorAware() {
return new AuditorAware<Long>() {
@Autowired
private UserService userService;
@Override
public Long getCurrentAuditor() {
SecurityContext ctx = SecurityContextHolder.getContext();
Authentication authentication = ctx.getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
return null;
}
User user = null;
Object principal = authentication.getPrincipal();
if (principal.getClass().equals(User.class)) {
user = (User) principal;
} else if (principal.getClass().equals(InetOrgPerson.class)) {
UserDetails userDetails = (UserDetails) principal;
String username = userDetails.getUsername();
UserDTO cond = new UserDTO();
cond.setUsername(username);
user = userService.findBasicOne(cond);
}
if (null == user) {
return null;
}
return user.getId();
}
};
}
}
它工作正常,但在控制器单元测试中,我有以下错误:
Error creating bean with name 'auditorAware': Unsatisfied dependency expressed through field 'userService';
我尝试使用以下方法在测试中初始化上下文@ContextConfiguration
:
@ContextConfiguration(classes = {
CompanyManagement.class,
CompanyManagementConfig.class,
CompanyController.class,
+ UserService.class,
}, initializers = ConfigFileApplicationContextInitializer.class)
如何修复我的单元测试?
解决方案
首先,它不是单元测试。这是一个集成测试。
为什么它不起作用?
您应该在 @ContextConfiguration 中仅指定配置文件,例如。包含 bean 声明的文件。
怎么修?
创建一个单独的配置文件,用于特定的集成测试(应该在 下src/test/
)
如果 UserService 具有@Component
注释(或其中一个子项)并由组件扫描创建:
@ComponentScan({"package where UserService class located"})
public class SomeSpecificIntergarionTestConfig {
}
如果在某些 java-config 中显式创建了 UserService:
public class SomeSpecificIntergarionTestConfig {
@Bean
public UserService userService{
return new UserService();
}
}
然后将此配置添加到上下文配置注释中:
@ContextConfiguration(classes = {
SomeSpecificIntergarionTestConfig.class,
rest of configs.
})
重要:为避免组件扫描问题,最好不要使用@Configuration
注释标记测试配置
推荐阅读
- r - 计算 R 中每组连续连续值的长度
- kotlin - 如何在 Gradle 中从 uri 生成 openapi 客户端
- amazon-web-services - AWS S3 存储桶 - 允许从特定 AWS 账户将文件下载到每个 IAM 和用户
- python - Plotly:如何在绘图内/轴右侧设置 y 轴刻度标签?
- cakephp - cakephp 错误 找不到别名 xxx 的表类
- xml - Infinispan 11.x - 12.x XML 配置
- sql-server - SQL Server:存储过程返回一个包含 3 个项目的集合
- python - 使用python制作一个列表并仅限制单个字符的输入。如果用户输入两个字符,它将无效
- qt - x 上的 NumberAnimation 在 ColumLayout 中不起作用?
- python - [SQL Server]字符串''后的非右引号