gpt4 book ai didi

java - 单元测试中通过字段 'userService' 表达的不满足的依赖关系

转载 作者:行者123 更新时间:2023-12-01 18:01:47 26 4
gpt4 key购买 nike

在 Spring Boot 应用程序中,我有一个使用 @Autowired userServiceAuditorAwareInterface

看起来像:


@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();
}
};
}
}

它工作正常,但在 Controller 单元测试中,我遇到以下错误:

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 {
}

如果 UserService 是在某些 java-config 中显式创建的:

public class SomeSpecificIntergarionTestConfig {
@Bean
public UserService userService{
return new UserService();
}
}

然后将此配置添加到上下文配置注释中:

@ContextConfiguration(classes = {
SomeSpecificIntergarionTestConfig.class,
rest of configs.
})

重要:为了避免组件扫描问题,最好不要使用 @Configuration 注解标记测试配置

关于java - 单元测试中通过字段 'userService' 表达的不满足的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60615592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com