我使用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丢失了。)
dummy.value
@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
@PropertySource
spring.main.web-environment=false
DummyProperties
我肯定会选择最后一个。也许您有充分的理由为此进行集成测试?