编程语言
首页 > 编程语言> > 测试spring应用程序上下文无法启动的最佳方法是什么?

测试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