簡體   English   中英

Spring Boot,測試主應用類

[英]Spring Boot, test main application class

我在 Spring Boot 應用程序的應用程序類中有一個邏輯,但我不知道如何進行單元和集成測試來覆蓋它。

這是代碼。

    @SpringBootApplication
    public class MlgApplication {

        public static void main(String[] args) throws IOException {
            ConfigurableApplicationContext run = SpringApplication.run(MlgApplication.class, args);

            ListBean ListBean = run.getBean(ListBean.class);
            ListBean.createList();
        }
    }

這是一個使用“java -jar mlg.jar”運行的命令行應用程序

如果您使用的是Spring initializr ,則會為您創建此測試。 您可以將其稱為集成測試,因為它將嘗試啟動您的應用程序上下文(從而集成所有類)。 它是這樣的:

@RunWith(SpringRunner.class)
@SpringBootTest
public class BootApplicationTests {

    @Test
    public void contextLoads() {
    // some more optional integration assertions here
    // like asserting number of beans, are they null, etc...
    }
}

對於您的特定域邏輯,您可以嘗試斷言列表是否已創建,但我會將其放在單獨的類中作為單元測試。

我設法這樣做,使用 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  //Junit5
    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));
        }
    }
}

所以,我在這里問為什么: How to Unit test Spring-Boot Application main() method to get Jacoco test coverage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM