I have a project with Java 17 and Spring 3. In my pom.xml the Test extensions are the following:
- junit-jupiter: version 5.10.1.
- mockito-core: version 5.8.0.
- mockito-junit-jupiter: version 5.8.0
I have the following class:
<code>@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
@Value("${mail.senderUsername}")
private String mailSenderUsername;
@Override
public void sendMailConfirmationToken(MailSimpleRequest mailRequest) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.setFrom(mailSenderUsername);
message.setTo(mailRequest.toUsers());
message.setSubject(mailRequest.subject());
message.setText("<div><p>Message</p></div>", true);
this.mailSender.send(mimeMessage);
}
}
</code>
<code>@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
@Value("${mail.senderUsername}")
private String mailSenderUsername;
@Override
public void sendMailConfirmationToken(MailSimpleRequest mailRequest) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.setFrom(mailSenderUsername);
message.setTo(mailRequest.toUsers());
message.setSubject(mailRequest.subject());
message.setText("<div><p>Message</p></div>", true);
this.mailSender.send(mimeMessage);
}
}
</code>
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
@Value("${mail.senderUsername}")
private String mailSenderUsername;
@Override
public void sendMailConfirmationToken(MailSimpleRequest mailRequest) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.setFrom(mailSenderUsername);
message.setTo(mailRequest.toUsers());
message.setSubject(mailRequest.subject());
message.setText("<div><p>Message</p></div>", true);
this.mailSender.send(mimeMessage);
}
}
I am doing the following test:
<code>@ExtendWith(MockitoExtension.class)
class MailServiceImplTest {
@Mock
private JavaMailSender mailSender;
@Mock
private MimeMessage mimeMessage;
@Mock
private MimeMessageHelper mimeMessageHelper;
private final MailSimpleRequest mailRequest = Data.givenMailRequest();
@InjectMocks
private MailServiceImpl mailService;
@Test
void sendMailConfirmationToken() throws MessagingException {
when(mailSender.createMimeMessage()).thenReturn(mimeMessage);
mailService.sendMailConfirmationToken(mailRequest);
verify(mailSender).send(any(MimeMessage.class));
}
}
</code>
<code>@ExtendWith(MockitoExtension.class)
class MailServiceImplTest {
@Mock
private JavaMailSender mailSender;
@Mock
private MimeMessage mimeMessage;
@Mock
private MimeMessageHelper mimeMessageHelper;
private final MailSimpleRequest mailRequest = Data.givenMailRequest();
@InjectMocks
private MailServiceImpl mailService;
@Test
void sendMailConfirmationToken() throws MessagingException {
when(mailSender.createMimeMessage()).thenReturn(mimeMessage);
mailService.sendMailConfirmationToken(mailRequest);
verify(mailSender).send(any(MimeMessage.class));
}
}
</code>
@ExtendWith(MockitoExtension.class)
class MailServiceImplTest {
@Mock
private JavaMailSender mailSender;
@Mock
private MimeMessage mimeMessage;
@Mock
private MimeMessageHelper mimeMessageHelper;
private final MailSimpleRequest mailRequest = Data.givenMailRequest();
@InjectMocks
private MailServiceImpl mailService;
@Test
void sendMailConfirmationToken() throws MessagingException {
when(mailSender.createMimeMessage()).thenReturn(mimeMessage);
mailService.sendMailConfirmationToken(mailRequest);
verify(mailSender).send(any(MimeMessage.class));
}
}
When I verify the test, it gives me the following error:
<code>OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
java.lang.IllegalArgumentException: From address must not be null
at org.springframework.util.Assert.notNull(Assert.java:172)
at org.springframework.mail.javamail.MimeMessageHelper.setFrom(MimeMessageHelper.java:571)
at ms.mailsender.service.impl.MailServiceImpl.sendMailConfirmationToken(MailServiceImpl.java:40)
at ms.mailsender.service.impl.MailServiceImplTest.sendMailConfirmationToken(MailServiceImplTest.java:52)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
</code>
<code>OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
java.lang.IllegalArgumentException: From address must not be null
at org.springframework.util.Assert.notNull(Assert.java:172)
at org.springframework.mail.javamail.MimeMessageHelper.setFrom(MimeMessageHelper.java:571)
at ms.mailsender.service.impl.MailServiceImpl.sendMailConfirmationToken(MailServiceImpl.java:40)
at ms.mailsender.service.impl.MailServiceImplTest.sendMailConfirmationToken(MailServiceImplTest.java:52)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
</code>
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
java.lang.IllegalArgumentException: From address must not be null
at org.springframework.util.Assert.notNull(Assert.java:172)
at org.springframework.mail.javamail.MimeMessageHelper.setFrom(MimeMessageHelper.java:571)
at ms.mailsender.service.impl.MailServiceImpl.sendMailConfirmationToken(MailServiceImpl.java:40)
at ms.mailsender.service.impl.MailServiceImplTest.sendMailConfirmationToken(MailServiceImplTest.java:52)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
¿Does anyone know how it can be solved??
New contributor
diego evangeliste is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.