0
it.ozimov.springboot.mail.service.EmailService
을 사용하여 메시지를 보내는 단위 테스트를 만들고 싶습니다. 여기 https://github.com/ozimov/spring-boot-email-tools 내 MailService 인터페이스입니다 :it.ozimov.springboot를 테스트하는 방법 Email?
import com.google.common.collect.Lists;
import it.ozimov.springboot.mail.model.Email;
import it.ozimov.springboot.mail.model.defaultimpl.DefaultEmail;
import it.ozimov.springboot.mail.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import java.io.UnsupportedEncodingException;
@Service
public class MailService {
@Autowired
public EmailService emailService;
@Value("${spring.mail.username}")
private String username;
public void sendMail(String subject, String messageContent, String recipient)
throws UnsupportedEncodingException, AddressException {
final Email email = DefaultEmail.builder()
.from(new InternetAddress(username))
.to(Lists.newArrayList(new InternetAddress(recipient)))
.subject(subject)
.body(messageContent)
.encoding("UTF-8").build();
emailService.send(email);
}
}
그리고 테스트를 만들기 위해 그린 메일을 사용하지만, 그것은 작동하지 않습니다
java.lang.AssertionError:
Expected :1
Actual :0
이있어 나는 그 결과로
@RunWith(SpringJUnit4ClassRunner.class)
public class MailServiceTest {
private static final String USER_PASSWORD = "abcdef123";
private static final String USER_NAME = "hascode";
private static final String EMAIL_USER_ADDRESS = "[email protected]";
private static final String EMAIL_TO = "[email protected]";
private static final String EMAIL_SUBJECT = "Test E-Mail";
private static final String EMAIL_TEXT = "This is a test e-mail.";
private static final String LOCALHOST = "127.0.0.1";
private GreenMail mailServer;
@InjectMocks
private MailService mailService = new MailService();
@Mock
private EmailService emailService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mailServer = new GreenMail(ServerSetupTest.SMTP);
mailServer.start();
mailServer.setUser(EMAIL_USER_ADDRESS, USER_NAME, USER_PASSWORD);
}
@After
public void tearDown() {
mailServer.stop();
}
@Test
public void getMails() throws IOException, MessagingException,
UserException, InterruptedException {
String subject = "Some subject";
String body = "Some contents.";
String recipient = "[email protected]";
ReflectionTestUtils.setField(mailService, "username", "bla");
mailService.sendMail(subject, body, recipient);
MimeMessage[] messages = mailServer.getReceivedMessages();
assertNotNull(messages);
assertEquals(1, messages.length);
MimeMessage m = messages[0];
assertEquals(EMAIL_SUBJECT, m.getSubject());
assertTrue(String.valueOf(m.getContent()).contains(EMAIL_TEXT));
assertEquals(EMAIL_TO, m.getFrom()[0].toString());
}
}
누군가 내가 뭘 잘못하고 있는지 어떤 생각을 가지고 있을까요? MailService는 컨트롤러에서 작동하기 때문에 (이메일을 전송 함) 테스트는 작동하지 않습니다.