问题描述
我们有一个接口的两个实现类,我正在使用@qualifier选择一个实现,它可以正常工作。但是在kotlin junit测试中,当junit test试图在控制器中创建EmailService bean时我遇到了错误。 qualifier明确提到要使用一种实现时,无法解析使用哪种实现。我们正在使用jupiter junit,这是kotlin测试类。
controller class:
@RestController
public class ProfileController {
//injecting one of the implementation of EmailService
@Autowired
@Qualifier("harmonyService")
private EmailService emailService;
........
}
EmailService interface:
public interface EmailService {
void someMethod();
}
we have two implementation classes of Email Service
a) First Implementation
@Component("harmonyService")
public class EmailHarmonyServiceImpl implements EmailService {
void someMethod() {
//implementation
}
}
b)second implementation
@Component("notificationService")
public class EmailNotificationServiceImpl implements EmailService {
void someMethod() {
//implementation
}
}
junit test:
@ExtendWith(SpringExtension::class)
@ActiveProfiles("test,jsonlogs")
@WebMvcTest(value = [ProfileController::class])
class ProfileApiApplicationTests {
@Autowired
private lateinit
var emailService: EmailService
//some more code
}
Error while running the test:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'profileController': Unsatisfied dependency expressed through field 'emailService';
nested exception is org.springframework.beans.factory.NoSuchBeanDeFinitionException: No qualifying bean of type 'com.loyaltyone.account.profileapi.services.EmailService'
available: expected at least 1 bean which qualifies as autowire candidate.Dependency annotations: {
@org.springframework.beans.factory.annotation.Autowired(required = true),@org.springframework.beans.factory.annotation.Qualifier(value = harmonyService)
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)