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

标签 java spring-boot junit

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

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

enter image description here

我的测试类只是默认类。

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

    @Test
    public void contextLoads() {
    }
}

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

最佳答案

所有这些答案似乎都是多余的。
您不会为了让度量工具满意而添加测试。
加载应用程序的 Spring 上下文需要时间。不要为了在您的应用程序中赢得大约 0.1% 的覆盖率而在每个开发人员构建中添加它。
在这里,您不仅仅涵盖 1 个公共(public)方法中的 1 个语句。在一个通常会写上千条语句的应用程序中,它不代表任何覆盖范围。

第一个解决方法:让你的 Spring Boot 应用程序类没有在里面声明 bean。如果您有它们,请将它们移动到配置类中(以使它们仍然被单元测试覆盖)。然后忽略 test coverage configuration. 中的 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[] {});
   }
}

关于java - 如何测试 Spring-boot 应用程序的主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650268/

相关文章:

带有信息流的 Java,输出到屏幕

Java 用像素处理颜色的工作原理

java - 从 Java 自动生成 Swagger 文档

java - 为我的 Spring Boot 应用程序创建默认的安全登录页面

java - 在 Jenkins 上构建时,单元测试没有重置上下文?

java.lang.NoSuchMethodError : javax. servlet.http.HttpServletRequest.isAsyncStarted() 同时使用 Mockito 和 Junit

java - 手动禁用和启用 Android HostApduService?

spring-boot - 要让Spring Boot应用程序通过AWS SES发送简单的电子邮件,需要执行哪些配置步骤?

JUnit 在继续之前等待

java - SQL Error : 1054, SQLState: 42S22 Unknown column in 'field list' 错误 Java Spring Boot Mysql 错误