如何测试 Spring-boot 应用的主类
如何测试 Spring-boot 应用的主类
我有一个spring-boot
应用程序,我的@SpringBootApplication
启动类看起来像标准类。因此,我为所有功能创建了许多测试,并将摘要发送到sonarqube以查看我的覆盖范围。
对于我的启动类,Sonarqube告诉我只有60%的覆盖率。因此,平均覆盖率不如预期。
我的测试类只是默认的。
@RunWith(SpringRunner.class) @SpringBootTest(classes = ElectronicGiftcardServiceApplication.class) public class ElectronicGiftcardServiceApplicationTests { @Test public void contextLoads() { } }
那么,我如何在应用程序的启动类中测试我的主类?
admin 更改状态以发布 2023年5月22日
所有这些答案都显得有些过于复杂。
你不需要添加测试来让度量工具感到满意。
加载应用程序的Spring上下文需要时间。不要在每个开发者构建中都添加它,只为了在应用程序中获得约0.1%的覆盖率。
在这里,你并没有仅覆盖1个公共方法中的1个语句。在通常编写成千上万个语句的应用程序中,这在覆盖率方面什么也不代表。
第一个解决方法:将Spring Boot应用程序类制作为没有声明任何bean。如果你有它们,请将它们移动到配置类中(以使它们仍被单元测试覆盖)。然后在测试覆盖率配置中忽略你的Spring Boot应用程序类。
第二种解决方法:如果你真的需要覆盖main()
调用(例如出于组织原因),那么创建一个测试它的集成测试(由持续集成工具执行,而不是在每个开发者构建中执行),并清楚地记录测试类的目的:
import org.junit.Test; // Test class added ONLY to cover main() invocation not covered by application tests. public class MyApplicationIT { @Test public void main() { MyApplication.main(new String[] {}); } }