小编典典

测试spring应用程序上下文无法启动的最佳方法是什么?

spring-boot

我使用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。


阅读 286

收藏
2020-05-30

共1个答案

小编典典

为什么要开始进行集成测试?为什么要为此启动功能完善的Spring Boot应用程序?

在我看来,这就像单元测试。话虽如此,您有几种选择:

  • 不要添加@IntegrationTest,Spring Boot不会以启动网络服务器作为开始(用于@PropertySource将值传递给测试,但是将无效值传递给整个测试类感觉很错误)
  • 您可以使用spring.main.web-environment=false禁用Web服务器(但是以上几点很愚蠢)
  • 编写一个处理DummyProperties您的单元测试的单元测试。您甚至不需要为此启动Spring Boot应用程序。看看我们自己的测试套件

我肯定会选择最后一个。也许您有充分的理由为此进行集成测试?

2020-05-30