如何测试 Spring-boot 应用的主类

18 浏览
0 Comments

如何测试 Spring-boot 应用的主类

我有一个spring-boot应用程序,我的@SpringBootApplication启动类看起来像标准类。因此,我为所有功能创建了许多测试,并将摘要发送到sonarqube以查看我的覆盖范围。

对于我的启动类,Sonarqube告诉我只有60%的覆盖率。因此,平均覆盖率不如预期。

\"enter

我的测试类只是默认的。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ElectronicGiftcardServiceApplication.class)
public class ElectronicGiftcardServiceApplicationTests {
    @Test
    public void contextLoads() {
    }
}

那么,我如何在应用程序的启动类中测试我的主类?

admin 更改状态以发布 2023年5月22日
0
0 Comments

你可以这样做

@Test
public void applicationContextLoaded() {
}
@Test
public void applicationContextTest() {
    mainApp.main(new String[] {});
}

0
0 Comments

所有这些答案都显得有些过于复杂。
你不需要添加测试来让度量工具感到满意。
加载应用程序的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[] {});
   }
}

0