[英]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.