道歉,因为这似乎是一个无用的行为,但有没有办法我们可以实际上对Spring-Boot(1.3.8.RELEASE)的Application.java进行junit测试,这个类什么都不做但是启动Spring-boot应用程序?
如下所示:
window.num3 = require('./num3');
也许我可以尝试捕捉异常?但我还有什么可以测试,以便JUnit将测试SpringApplication.run()?感谢任何一个例子。谢谢大家!
答案 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。