我试图使用Junit5为特定的服务类创建单元/集成测试,以避免整个项目过载。
{
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警告732---[main]O.S.W.C.S.GenericWebApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfiedDependencyException:创建名为“email senderservice”的bean时出错:通过构造函数参数0表示未满足的依赖关系;嵌套异常是org.springframework.beans.factory.NosuchBeanDefinitionException:没有类型为'org.springframework.mail.javamail.javamailSender'的合格bean可用:至少需要1个符合autowire候选的bean。依赖项批注:{}2019-04-03 14:56:06.153错误732---[
main]O.S.B.D.LoggingFailureAnalysisReporter:
行动:
考虑在您的配置中定义一个类型为'org.springframework.mail.javamail.JavaMailSender'的bean。
2019-04-03 14:56:06.159错误732---[main]o.s.test.context.TestContextManager:允许TestExecutionListener[org.springframework.test.context.web.ServletTestExecutionListener@342C38F8]准备测试实例[com.server.server.test.junit.emailServiceTest@4C7A078]时捕获异常
问题是您实际上没有可用的JavaMailSender
(而且在测试过程中您也不希望有一个真正的JavaMailSender)。您有四种选择:
>
在测试配置中注册mock/stubJavaMailSender
bean。
使用自动配置使您的emailsenderservice
自身@conditionalonbean(javamailsender.class)
并注册一个存根(这通常是我在测试“系统发送事务性邮件吗?”时所做的)。
这里根本不用Spring DI。构造函数注入的主要优点是可以手动实例化bean,并且可以EmailSenderService
及其依赖项。
如果我理解测试的预期范围,那么#3可能是适合您的解决方案。
我使用spring网站制作了我的项目,有以下选项:-gradle项目,java,spring启动版本2.4.5,java版本8,依赖项:-spring Web,Thymeleaf,spring数据API
我从不编写集成测试,不明白我做错了什么?会是什么问题?按照我的理解,我应该像这样添加@componentscan或smth?
我有这个问题,知道吗?我正在添加洞迹 我的代码如下所示: 我的文件夹目录如下所示: 堆栈跟踪:
我正在迁移到JUnit5,我想知道在JUnit5中是否有一种简单的方法可以知道测试何时失败,就像我们在使用TestWatcher的JUnit4中那样。 我做了一些研究,发现了一些类似的问题,但仍未解决,比如这样一个问题:https://github.com/junit-team/junit5/issues/542因为大多数问题都很老,所以我想问一下,以防最近有一个解决方案。 想法是能够做一个屏幕截
以下是错误消息 java.lang.IllegalStateException:无法加载ApplicationContext 一个使用elasticSearch、mysql、redis等的Spingboot项目,谷歌有很多,但他只是一个新的Spingboot。网上的东西不管用。我不知道怎么改。 application-local.yml 应与ES的配置相关 控制器
我用JPA Hibernate开发了一个SpringBoot应用程序,它运行得非常好。现在我不得不从测试开始,我真的不知道如何解决这个错误: 我的PlayersRepository是: 我见过这个答案,但没有找到解决方法。我应该更改或添加什么?以前从没用过这种东西,请好心点。