Spring boot junit test加载应用程序上下文失败

时间:2018-02-01 10:35:49

标签: java maven spring-boot junit jhipster

当我在类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作为本地人。我也使用结构作为Jhipster生成的项目

2 个答案:

答案 0 :(得分:0)

通常,您不会加载Spring上下文文件,然后通过mailService = new MailService();

在测试中实例化一个组件

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

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

答案 1 :(得分:0)

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

用简单的语言让@Autowired注释使用SpringBoot处理jUnit中的安装。