私のテストは失敗しました。これは私のテストクラスです。
public class EmailGeneratorServiceTests {
@Mock
JavaMailSender javaMailSender;
EmailGeneratorService emailGeneratorService;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
emailGeneratorService = new EmailGeneratorService(javaMailSender);
}
@Test
public void generateAndSendMessageSuccess() throws MessagingException, IOException {
String email = "[email protected]";
String body = "Some contents.";
String subject = "Some subject";
emailGeneratorService.generateAndSendMessage(email, body, subject);
List<Message> inbox = Mailbox.get(email);
//inbox.size === 0
assertTrue(inbox.size() == 1);
assertEquals(subject, inbox.get(0).getSubject());
assertEquals(body, inbox.get(0).getContent());
}
}
inbox.size()を呼び出すと、0が返されますが、期待値は1です。サーバーはsmtpです。
これはEmailGeneratorServiceです。
@Service
public class EmailGeneratorService {
SimpleMailMessage simpleMailMessage;
JavaMailSender javaMailSender;
@Autowired
public EmailGeneratorService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
this.simpleMailMessage = new SimpleMailMessage();
}
public void generateAndSendMessage (String email, String messageBody, String subject) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(email);
simpleMailMessage.setText(messageBody);
simpleMailMessage.setSubject(subject);
javaMailSender.send(simpleMailMessage);
}
}
何が悪いのか書いて、何が悪いのか説明してください。
JavaMailSender
引数を取得してそれを主張するには、キャプチャする必要があります。
ArgumentCaptor<SimpleMailMessage> emailCaptor = ArgumentCaptor.forClass(SimpleMailMessage .class);
verify(javaMailSender, times(1)).send(emailCaptor.capture());
List<SimpleMailMessage> actualList = emailCaptor.getAllValues();
assertTrue(actualList.size() == 1);
assertEquals(subject, actualList.get(0).getSubject());
assertEquals(body, actualList.get(0).getContent());
ErrorCollector
複数の値をアサートするユーザーは、次の@Before
ようにメソッドの前に定義します。
@Rule
public ErrorCollector collector= new ErrorCollector();
、そしてアサーションでは次のように使用します:
collector.checkThat(getResult(), equalTo("ERROR!"));
テストは次のようになります。
public class EmailGeneratorServiceTests {
private static final String EMAIL = "[email protected]";
private static final String BODY = "Some contents.";
private static final String SUBJECT = "Some subject";
@Mock
private JavaMailSender javaMailSender;
private EmailGeneratorService emailGeneratorService;
@Rule
public ErrorCollector collector = new ErrorCollecto();
@Before
public void before() {
MockitoAnnotations.initMocks(this);
emailGeneratorService = new EmailGeneratorService(javaMailSender);
}
@Test
public void generateAndSendMessageSuccess() throws Exception {
// Arrange
emailGeneratorService.generateAndSendMessage(email, body, subject);
// Act
Mailbox.get(email);
// Assert
ArgumentCaptor<SimpleMailMessage> emailCaptor =
ArgumentCaptor.forClass(SimpleMailMessage .class);
verify(javaMailSender, times(1)).send(emailCaptor.capture());
List<SimpleMailMessage> actualList = emailCaptor.getAllValues();
collector.checkThat(actualList.size(), equalTo(1));
collector.checkThat(actualList.get(0).getSubject(), equalTo(SUBJECT));
collector.checkThat(actualList.get(0).getContent(), equalTo(CONTENT));
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加