【发布时间】:2026-02-21 16:35:01
【问题描述】:
我正在尝试使用 Junit5 为特定服务类创建单元/集成测试,以避免整个项目过载。
所以在这里我尝试运行 EmailService 及其依赖类,但我得到了 java.lang.IllegalStateException: Failed to load ApplicationContext. Error creating bean with name 'emailSenderService. No qualifying bean of type 'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean which qualifies as autowire candidate.'。
我是否必须运行整个应用程序才能测试单个服务?
build.yml
{
testImplementation ('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'junit', module: 'junit'
}
testImplementation "org.junit.jupiter:junit-jupiter:5.4.1"
}
服务:
public class EmailSenderService {
private final JavaMailSender sender;
private final SpringTemplateEngine templateEngine;
private final MessageSource i18n;
public EmailSenderService(JavaMailSender sender, SpringTemplateEngine templateEngine,
@Qualifier("messageSource") MessageSource i18n) {
this.sender = sender;
this.templateEngine = templateEngine;
this.i18n = i18n;
}
}
测试类:
@SpringBootTest(
classes = {EmailSenderService.class}
)
@ExtendWith({SpringExtension.class})
class EmailServiceTest {
private static GreenMail smtp;
@Autowired
private EmailSenderService mailService;
@BeforeAll
static void init() {
smtp = new GreenMail(new ServerSetup(3026,null,"smtp"));
smtp.start();
}
@AfterAll
static void tearDown() {
smtp.stop();
}
@BeforeEach
void clearUp() throws FolderException {
smtp.purgeEmailFromAllMailboxes();
}
@Test
void testNewBidRequestEmail() throws MessagingException {
EmailMessageTemplateDto contact = new EmailMessageTemplateDto("test","test@test.com","test message");
mailService.sendUserContactEmail(contact);
Assertions.assertTrue(smtp.waitForIncomingEmail(1));
}
}
错误:
2019-04-03 14:56:06.146 WARN 732 --- [主要] o.s.w.c.s.GenericWebApplicationContext:遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“emailSenderService”的 bean 时出错:不满意 通过构造函数参数 0 表示的依赖关系;嵌套异常 是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 'org.springframework.mail.javamail.JavaMailSender' 可用:预期 至少 1 个符合自动装配候选资格的 bean。依赖 注释:{} 2019-04-03 14:56:06.153 错误 732 --- [
主要] o.s.b.d.LoggingFailureAnalysisReporter:***************************应用程序启动失败
说明:
构造函数的参数0 com.server.server.service.EmailSenderService 需要一个 bean 输入 'org.springframework.mail.javamail.JavaMailSender' 不能 找到了。
行动:
考虑定义一个 bean 类型 'org.springframework.mail.javamail.JavaMailSender' 在你的 配置。
2019-04-03 14:56:06.159 错误 732 --- [主要] o.s.test.context.TestContextManager : 捕获异常同时 允许 TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@342c38f8] 准备测试实例 [com.server.server.test.junit.EmailServiceTest@4c7a078]
java.lang.IllegalStateException: 无法加载 ApplicationContext 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) ~[spring-test-5.1.5.RELEASE.jar:5.1.5.RELEASE] 在 org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108) ...
【问题讨论】:
标签: java spring-boot junit5