测试spring应用程序上下文无法启动的最佳方法是什么?
作者:互联网
我使用spring-boot-starter-web和spring-boot-starter-test.
假设我有一个绑定配置属性的类:
@ConfigurationProperties(prefix = "dummy")
public class DummyProperties {
@URL
private String url;
// getter, setter ...
}
现在我想测试我的bean验证是否正确.如果未设置属性dummy.value或者它包含无效的URL,则上下文应该无法启动(带有特定的错误消息).如果属性包含有效的URL,则应启动上下文. (测试会显示@NotNull缺失.)
测试类看起来像这样:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@IntegrationTest({ "dummy.url=123:456" })
public class InvalidUrlTest {
// my test code
}
此测试将失败,因为提供的属性无效.告诉Spring / JUnit最好的方法是什么:“是的,这个错误是预期的”.在普通的JUnit测试中,我会使用ExpectedException.
解决方法:
为什么要开始集成测试?你为什么要为它开始一个完整的Spring Boot应用程序?
这对我来说就像是单元测试.话虽这么说,你有几个选择:
>不要添加@IntegrationTest,Spring Boot不会启动Web服务器(使用@PropertySource将值传递给您的测试,但将无效值传递给整个测试类感觉不对)
>您可以使用spring.main.web-environment = false来禁用Web服务器(但鉴于上述内容,这很愚蠢)
>编写一个单元测试来处理你的DummyProperties.您甚至不需要为此启动Spring Boot应用程序.看看our own test suite
我肯定会选择最后一个.也许你有充分的理由对它进行集成测试?
标签:spring,spring-boot,junit,spring-test 来源: https://codeday.me/bug/20191008/1872103.html