【问题标题】:Spring boot junit test failed loading application contextSpring boot junit 测试加载应用程序上下文失败
【发布时间】:2018-07-11 15:42:49
【问题描述】:

当我在 MailServiceTest 类上运行 junit 测试时它工作正常,但是当我尝试执行 mvn build -B 时它失败了。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = InstaticketapiApplication.class)
public class MailServiceTest {

@Autowired
private ApplicationProperties applicationProperties;

@Autowired
private MessageSource messageSource;

@Autowired
private SpringTemplateEngine springTemplateEngine;

@Spy
private JavaMailSenderImpl javaMailSender;

@Captor
private ArgumentCaptor messageCaptor;

@Autowired
private MailService mailService;


@Before
public void setup() {
    MockitoAnnotations.initMocks(this);
    doNothing().when(javaMailSender).send(any(MimeMessage.class));
    mailService = new MailService();
    mailService.setApplicationProperties(applicationProperties);
    mailService.setJavaMailSender(javaMailSender);
    mailService.setMessageSource(messageSource);
    mailService.setTemplateEngine(springTemplateEngine);
}

@Test
public void testSendEmail() throws Exception {
    mailService.sendEmail("nemanja@test.com", "testSubject", "testCont", false, false);
    verify(javaMailSender).send((MimeMessage) messageCaptor.capture());
    MimeMessage message = (MimeMessage) messageCaptor.getValue();
    assertThat(message.getSubject()).isEqualTo("testSubject");
    assertThat(message.getContent().toString()).isEqualTo("testCont");
    assertThat(message.getAllRecipients()[0].toString()).isEqualTo("nemanja@test.com");
    assertThat(message.getFrom()[0].toString()).isEqualTo("InstaTicket");
    assertThat(message.getContent().getClass()).isEqualTo(String.class);
    assertThat(message.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8");
}

完整的代码可以在这里找到https://github.com/sansajn5/ISA-InstaTicketAPI,我正在使用 yaml 作为properites。另外我使用结构作为 Jhipster 生成的项目

【问题讨论】:

  • 欢迎来到 Stack Overflow!为了帮助人们回答您的问题,您需要更具体地说明失败。请edit 您的帖子包含您从minimal reproducible example 获得的确切错误(最好使用复制+粘贴以避免转录错误)。此外,您应该说明您已经进行了哪些调查以缩小问题范围。
  • @TobySpeight 我一回到家就编辑它,谢谢
  • 请显示异常堆栈跟踪

标签: java maven spring-boot junit jhipster


【解决方案1】:

问题是这一行:mailService = new MailService()。删除它。

用简单的语言让@Autowired 注解使用 SpringBoot 在 jUnit 中进行实例化。

【讨论】:

    【解决方案2】:

    通常您不会加载 Spring 上下文文件,然后通过 mailService = new MailService(); 在测试中实例化组件

    如果您正在编写单元测试,请不要加载 Spring 上下文文件并模拟您打算测试的组件的所有依赖项。

    如果您正在编写集成测试,请不要模拟依赖项,让框架加载上下文并连接依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-03
      • 2019-02-15
      • 2015-04-27
      • 2013-02-08
      • 2016-04-30
      • 2021-06-23
      • 2021-08-02
      • 2021-05-17
      相关资源
      最近更新 更多