我应该测试Spring Boot Application的main()方法吗?

deg*_*ath 2 java testing spring spring-boot

当我创建Spring Boot Application时,它会生成2个类:

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个是测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {

    @Test
    public void contextLoads() {
    }

}
Run Code Online (Sandbox Code Playgroud)
  1. 就像您可以注意到contextLoads测试为空。我应该如何为contextLoad提供正确的测试?应该留空吗?这是对的吗?还是我应该在里面放东西?

更新:

  1. 为什么这个测试应该保留?如果我在应用程序中有更多测试,我将知道spring上下文是否已加载或否。不仅仅是过度

我喜欢readed回答这个,但它并没有给我一个明确的答复。

jax*_*jax 7

将其留空。如果在加载应用程序上下文时发生异常,测试将失败。这个测试只是说“我的应用程序是否会在不引发异常的情况下加载”

第二个问题的更新

您希望保留此测试的原因是,当某项失败时,您希望找到根本原因。如果您的应用程序上下文无法加载,您可以假设所有其他失败的测试都是由此引起的。如果上述测试通过,您可以假设失败的测试与加载上下文无关。


dav*_*xxx 5

实际上,main()单元引导/集成测试未涵盖Spring Boot应用程序的方法,因为Spring Boot测试不会调用该main()方法来启动Spring Boot应用程序。

现在,我认为这篇文章的所有答案似乎都过分了。
他们希望添加对该main()方法的测试,以使度量工具满意(Sonar)。
加载Spring上下文和加载应用程序需要时间
不要在每个开发人员版本中添加它,只是为了赢得应用程序约0.1%的覆盖率。
我添加了一个答案。


除了简单的示例和您引用的其他文章之外,如果绝对main()包含一些逻辑,则为该方法创建测试可能是有意义的。例如,当您将特定参数传递给应用程序时,您可以在main()聚会中处理它们。