How to Unit test Spring-Boot Application main() method to get Jacoco test coverage

Viewed 1119

How to Unit test Spring-Boot Application main() method with SpringApplication.run() . I am wondering if it is possible to get Jacoco test coverage on this class. (Otherwise I will exclude it)

This question is similar, but not the same, as this question: Spring Boot, test main application class

I am using mockito-core 3.8 and mockito-inline.

This test code works for me but Jacoco does not pick it up as test coverage:

@SpringBootTest
@ActiveProfiles("test")
public class AutowireTest {

    private static final String ARG = "";
    private static final String[] ARGS = new String[]{ARG};

    @Autowired
    ConfigurableApplicationContext context;

    @Test
    public void main() {
        try (MockedStatic<Application> appStatic = Mockito.mockStatic(Application.class);
             MockedStatic<SpringApplication> springStatic = Mockito.mockStatic(
               SpringApplication.class)) {
            appStatic.when(() -> Application.main(ARGS))
                .thenCallRealMethod();
            springStatic.when(() -> SpringApplication.run(Application.class, ARGS))
                .thenReturn(context);

            // when
            Application.main(ARGS);

            //then
            appStatic.verify(times(1),
                () -> Application.main(ARGS));
            springStatic.verify(times(1),
                () -> SpringApplication.run(Application.class, ARGS));
        }
    }
}

Is Jacoco not able to show coverage on static methods?

0 Answers
Related