首页 > 解决方案 > Junit中的自动装配

问题描述

我正在尝试从上下文中自动装配两个对象,但似乎在Configuraiton和上都出现了 Nullpointer 异常JavaMailSender,我可能会丢失什么。如果我只是自动装配EmailService,它可以正常工作,但是我需要将一个模拟对象传递给构造函数,这就是为什么我要按照现在的方式进行操作。如果我用 注释我的EmailService对象@Autowire,它就可以工作。

@SpringBootTest

    public class EmailServiceTest {

        @Autowired
        private Configuration configuration;

        @Autowired
        private JavaMailSender javaMailSender;

        private AuthUser authUser = Mockito.mock(AuthUser.class);

        private EmailService emailService = new EmailService(javaMailSender,configuration,authUser);


 @Test
public void testSendAttachment() throws IOException {
    List<Attachment> attachments = new ArrayList<>();
    attachments.add(new Attachment(new Archive(TestData.getDocs(), "test").getZipArchive(), "documents.zip"));
    attachments.add(new Attachment(new Archive(TestData.getDocs(), "test").getZipArchive(), "documents2.zip"));
    Email mail = new Email("a",
            "b",
            "Requested archive attached",
            "Thank you for using our services, please refer to the attached archive", attachments);
    emailService.sendMailWithAttachment(mail);

}

  @Test
public void shouldSendConfirmationEmail(){
    Mockito.when(authUser.getUsername()).thenReturn("email@email.com");
    emailService.sendConfirmationToCooperateEmail();
}

标签: javajunitautowired

解决方案


Spring 创建 EmailServiceTest.java 属性 Configuration 和 EmailService 默认为空,因为我们在属性电子邮件服务上初始化 EmailService 权限立即获取空值,然后 Spring 才将值注入 Configuration 和 EmailSender。

 @Autowired
private Configuration configuration;

@Autowired
private JavaMailSender javaMailSender;

private AuthUser authUser = Mockito.mock(AuthUser.class);


@Test
public void testSendAttachment() throws IOException {
    EmailService emailService = new EmailService(javaMailSender, configuration, authUser);

推荐阅读