Spring Boot,测试主应用程序类

时间:2018-08-14 12:05:16

标签: java spring unit-testing spring-boot integration-testing

我在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'一起运行的命令行应用程序

2 个答案:

答案 0 :(得分:0)

如果您使用的是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...
    }
}

对于特定的域逻辑,您可以尝试断言是否创建了列表,但我会将其作为单元测试放在单独的类中。

答案 1 :(得分:0)

我设法做到了这一点,使用 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