我应该测试Spring Boot应用程序的main()方法吗?如果是的话,应该如何测试?

19 浏览
0 Comments

我应该测试Spring Boot应用程序的main()方法吗?如果是的话,应该如何测试?

创建Spring Boot应用程序时会生成两个类:

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

第二个类是测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {
    @Test
    public void contextLoads() {
    }
}

  1. 你可以注意到contextLoads测试是空的。我应该如何为contextLoads提供正确的测试?它应该保持为空吗?这样正确吗?还是我应该在里面放入一些内容?

更新:

  1. 为什么这个测试应该保留?如果我在应用程序中有更多的测试,我会知道Spring上下文是否已加载。这不是多余的吗?

我阅读了像这样的答案,但它没有给我一个明确的答案。

0
0 Comments

在Spring Boot应用程序中,main()方法通常不涵盖在单元测试或集成测试中,因为Spring Boot测试不会调用main()方法来启动Spring Boot应用程序。然而,有些人认为应该测试main()方法,这样可以让度量工具(如Sonar)更加满意。但是,加载Spring上下文和加载应用程序需要时间,不值得为了在应用程序中增加0.1%的覆盖率而在每个开发者构建中添加它。以下是一个关于此问题的回答:

除了你提到的简单示例和其他帖子之外,如果在main()方法中包含了一些逻辑,那么创建一个测试可能是有意义的。例如,当你向应用程序传递特定的参数并在main()方法中处理它们时,这种情况就是如此。

解决方法:

1. 如果你的main()方法没有任何逻辑,只是简单地启动Spring Boot应用程序,那么不需要编写测试。

2. 如果你的main()方法包含了一些逻辑,你可以编写一个单元测试来测试这些逻辑。例如,你可以模拟传递给main()方法的参数,并验证在不同参数情况下的应用程序行为是否符合预期。

0
0 Comments

原因:在Spring Boot应用程序中,测试main()方法的目的是确保应用程序能够加载并且没有抛出异常。通过测试main()方法,可以确定应用程序的上下文是否能够成功加载。

解决方法:在测试main()方法时,不需要添加额外的断言或判断语句。如果应用程序在加载过程中抛出异常,测试将会失败。因此,只需保持main()方法的简单测试,以确保应用程序能够成功加载。这样,当其他测试失败时,可以确定问题是由于应用程序上下文加载失败引起的。

0
0 Comments

当你使用Spring Initializer构建一个Spring Boot应用程序时,它会自动创建一个Application类和它的测试类。

代码中使用了@SpringBootTest注解在测试类上,它告诉Spring Boot去查找一个主配置类(例如,带有@SpringBootApplication注解的类)并使用它来启动一个Spring应用程序上下文。空的contextLoads()方法是一个测试,用来验证应用程序是否能够成功加载Spring上下文。

对于空的方法,你不需要提供任何测试用例。尽管你可以做一些类似下面这样的事情来验证你的控制器或服务bean的上下文:

public class ApplicationContextTest {
    private MyController myController;
    private MyService myService;
    public void contextLoads() throws Exception {
        assertThat(myController).isNotNull();
        assertThat(myService).isNotNull();
    }
}

所以,你是否应该测试Spring Boot应用程序的main()方法呢?答案是不需要。因为这个方法只是用来启动应用程序的,它不涉及任何业务逻辑。相反,你应该专注于测试应用程序中的控制器、服务和其他组件的功能。

希望这个解答对你有帮助!

0