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