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

新手上路,请多包涵

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

对于我的初学者课程,Sonarqube 告诉我,我只有 60% 的覆盖率。所以平均覆盖率不如预期。

在此处输入图像描述

我的测试类只是默认类。

 @RunWith(SpringRunner.class)
@SpringBootTest(classes = ElectronicGiftcardServiceApplication.class)
public class ElectronicGiftcardServiceApplicationTests {

    @Test
    public void contextLoads() {
    }
}

那么如何在我的应用程序的起始类中测试我的主类呢?

原文由 Patrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

所有这些答案似乎都是多余的。

您不会为了让度量工具满意而添加测试。

加载应用程序的 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[] {});
   }
}

原文由 davidxxx 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以这样做

@Test
public void applicationContextLoaded() {
}

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

原文由 fg78nc 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题