백엔드 개발자 블로그

DI 방법으로 인한 Error 본문

ETC/트러블 슈팅

DI 방법으로 인한 Error

backend-dev 2023. 12. 15. 19:05

원인

필드 주입 사용

public class MailSender {

    @Autowired
    private JavaMailSender javaMailSender;

    public void sendText(String msg, String mailReceiver) {
        javaMailSender.sendText(msg, mailReceiver);
    }
}

 

테스트 코드 작성

public class MailSenderTest {

    @Test
    public void mailSendTest {
        MailSender mailSender = new MailSender();
        String mailReceiver = "asdf@test.com";
        mailSender.sendText("테스트", mailReceiver);
    }
}

 

테스트에서 JavaMailSender가 계속 null이 되어 NPE 발생

 

해결 방법

필드 주입을 생상자 주입으로 바꿈

public class MailSender {

    private final JavaMailSender javaMailSender;

    public void sendText(String msg, String mailReceiver) {
        javaMailSender.sendText(msg, mailReceiver);
    }
    
    @Autowired
    public MailSender(JavaMailSender javaMailSender) {
    	this.javaMailSender = javaMailSender;
    }
}