Как модульно протестировать метод main() приложения Spring-Boot, чтобы получить тестовое покрытие Jacoco

Как выполнить модульное тестирование метода main() приложения Spring-Boot с помощью SpringApplication.run() . Мне интересно, возможно ли получить тестовое покрытие Jacoco в этом классе. (Иначе я его исключаю)

Этот вопрос похож, но не совпадает с этим вопросом: Spring Boot, тестовое основное приложение класс

Я использую mockito-core 3.8 и mockito-inline.

Этот тестовый код работает для меня, но Jacoco не воспринимает его как тестовое покрытие:

@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));
        }
    }
}

Разве Jacoco не может показать покрытие статических методов?


person djangofan    schedule 26.02.2021    source источник
comment
Отвечает ли это на ваш вопрос? Как протестировать основной класс приложения Spring-boot   -  person xerx593    schedule 27.02.2021
comment
Нет, не отвечает на него, но дает один ответ, который может быть обходным путем, который я могу использовать, используя аннотацию Generated Lombok, чтобы исключить сканирование кода.   -  person djangofan    schedule 27.02.2021
comment
Также интересует, как добиться этого с помощью Mockito (не Lombok, без необходимости запуска сервера)   -  person PatPatPat    schedule 01.03.2021
comment
Я не понимаю. В приведенном выше примере в моем вопросе уже используется Mockito с Mockito.mockStatic.   -  person djangofan    schedule 04.03.2021