MimeMessage를 사용해서 실제로 메일을 보내보고, 메일이 깨지지는 않는지 확인해보고 싶어서 다음과 같은 테스트를 작성했습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/testContext.xml")
public class SignupConfirmMimeMessageHelperTest {

    @Autowired
    JavaMailSender mailSender;

    @Test
    public void sendInteface() {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        Member member = new Member();
        member.setEmail("whiteship2000@gmail.com");
        assertNotNull(mimeMessage);
        SignupConfirmMimeMessageHelper helper = new SignupConfirmMimeMessageHelper(mimeMessage);
        helper.makeMessage(member);
        mailSender.send(mimeMessage);
    }

}

테스트를 만들면서 JavaMailSender와 MimeMessage, SignupConfirmMimeMessageHelper 클래스를 어떻게 사용할지 고민을 했죠. 생성자에 member도 같이 줘봤다가.. 뺏다가.. 했습니다. 결국은 빼냈습니다. 중요했던 건 SignupConfirmMimeMessageHelper 클래스의 생성 방법과 사용방법 이었습니다.

저런식으로 실제 메일을 보내 본 뒤.. 그대로 두면.. 테스트가 돌 때 마다 저한테 메일을 보내줄 겁니다. 상당히 귀찮은 테스트입니다. 그래서 생각을 했습니다. 안 되겠다. 어차피 메일 보내는 것도 확인했고.. 인코딩도 확인했고.. 내가 이 테스트에서 정하고자 했던 건 SignupConfirmMimeMessageHelper 클래스의 생성자 구조랑 사용법이니깐... 단위테스트로 고치자~

@RunWith(MockitoJUnitRunner.class)
public class SignupConfirmMimeMessageHelperTest {

    @Mock JavaMailSender mockSender;
    @Mock MimeMessage mockMessage;

    @Test
    public void sendInteface() {
        assertNotNull(mockSender);
        assertNotNull(mockMessage);
        when(mockSender.createMimeMessage()).thenReturn(mockMessage);
       
        MimeMessage mimeMessage = mockSender.createMimeMessage();
        Member member = new Member();
        member.setEmail("whiteship2000@gmail.com");
        SignupConfirmMimeMessageHelper helper =
            new SignupConfirmMimeMessageHelper(mimeMessage);
        helper.makeMessage(member);
        mockSender.send(mimeMessage);
    }

}

그래서 이렇게 고쳤습니다. 고치고 나니까... 이런 생각이 드네요.

맨 마지막 줄만 지워버릴껄 그랬나.... 허허헐...