mardi 14 juillet 2020

PowerMock The class not prepared for test

I use Powermock to mock static class and test send email, but have an error: The class javax.mail.Session not prepared for test

I do like all: use PrepareForTest and @RunWith(PowerMockRunner.class), but it isn't help. My test is:

@RunWith(PowerMockRunner.class)
@PrepareForTest(value = {MailingServiceImpl.class,Transport.class, Session.class})
@PowerMockRunnerDelegate(MockitoJUnitRunner.class)
@ContextConfiguration(classes = {MailingServiceImpl.class, TestMailingConfig.class,Transport.class, Session.class})
public class MailServiceTest {

    @Autowired
    private MailingService mailingService;
    @Autowired
    private MailingProperties mailingProperties;


    @TestConfiguration
    public static class TestMailingConfig {

        @Bean
        @Primary
        public MailingProperties mailingProperties() {
            MailingProperties mailingProperties = mock(MailingProperties.class);
            SmtpProperties smtpProperties = TestUtil.getSmtpProperties();
            MailingUser mailingUser = TestUtil.getMailingUser();
            when(mailingProperties.getSmtpProperties()).thenReturn(smtpProperties);
            when(mailingProperties.getMailingUser()).thenReturn(mailingUser);
            return mailingProperties;
        }

    }


    @Test
    void sendMailOk() throws MessagingException {
        Message message = TestUtil.getMessage();

        Session session = mock(Session.class);
        PowerMockito.mockStatic(Session.class);
        given(Session.getInstance(any(Properties.class), any(Authenticator.class))).willReturn(session);
        PowerMockito.mockStatic(Transport.class);

        MimeMessage mimeMessage = mock(MimeMessage.class);

        MimeMessageHelper mimeMessageHelper = spy(new MimeMessageHelper(mimeMessage,true));
        when(mimeMessageHelper.getMimeMessage()).thenReturn(mimeMessage);

        boolean result = mailingService.send(message);
        Assertions.assertEquals(true, result);
        PowerMockito.verifyStatic(Transport.class);
        Transport.send(mimeMessage);
    }

}

I have java 14 and my gradle contains this:

plugins {
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}
testImplementation(
'org.springframework.boot:spring-boot-starter-test',
            'org.powermock:powermock-module-junit4:2.0.7',
            'org.powermock:powermock-api-mockito2:2.0.7',
            'org.mockito:mockito-inline:3.4.0'
)

Aucun commentaire:

Enregistrer un commentaire