Spring Boot:无法对依赖@Qualifier注释的服务的控制器进行junit测试

问题描述

我们有一个接口的两个实现类,我正在使用@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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...