如何JUnit测试Spring-Boot的Application.java

时间:2017-01-21 02:25:27

标签: java spring-boot junit

道歉,因为这似乎是一个无用的行为,但有没有办法我们可以实际上对Spring-Boot(1.3.8.RELEASE)的Application.java进行junit测试,这个类什么都不做但是启动Spring-boot应用程序?

如下所示:

window.num3 = require('./num3');

也许我可以尝试捕捉异常?但我还有什么可以测试,以便JUnit将测试SpringApplication.run()?感谢任何一个例子。谢谢大家!

2 个答案:

答案 0 :(得分:26)

通常,以下内容足以测试应用程序上下文是否启动。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {

    @Test
    public void contextLoads() {
    }
}

但是,如果你想直接测试Application.main,你也可以这样测试:

public class ApplicationTest {

    @Test
    public void test()
    {
        Application.main(new String[]{
                "--spring.main.web-environment=false",
                "--spring.autoconfigure.exclude=blahblahblah",
                // Override any other environment properties according to your needs
        });
    }
}

答案 1 :(得分:0)

  

也许我可以尝试捕获异常?但是我还能测试什么   以便JUnit将测试SpringApplication.run()?任何例子是   赞赏。谢谢大家!

如果捕获到异常会使测试失败,这是无助的,因为在测试期间抛出的异常已经导致测试失败(更准确地说是错误)。
如果您已经执行了加载整个spring boot上下文(@SpringBootTest)的测试类,则无需编写测试来检查其是否正确加载。

如果Application类具有某种逻辑,则应该对其进行测试。
例如,您可以声明一个用@Before注释的方法,该方法在加载上下文之后进行一些处理,并且您想断言该处理已经完成了。其他示例:您可以在main()方法中传递一些参数,并且您想断言该方法已按预期使用了这些参数。
使用@SpringBootTest可以测试的所有内容。

如果您的Application类除了:

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

但是您需要所有相同的内容来涵盖main()测试方法,以便与某些Coverage工具或组织兼容,为此创建一个集成测试,清楚地记录下来,并让集成连续进行,因为加载Spring引导应用程序需要时间。您可以参考此question