与Spring Boot和Spock的集成测试
@IntegrationTest
用Spock
进行集成测试(例如)的最佳方法是什么?我想引导整个Spring Boot" title="Spring Boot">Spring Boot应用程序并执行一些HTTP调用以测试整个功能。
我可以使用JUnit做到这一点(首先运行应用程序,然后执行测试):
@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = MyServer.class)
@WebAppConfiguration
@IntegrationTest
class MyTest {
RestTemplate template = new TestRestTemplate();
@Test
public void testDataRoutingWebSocketToHttp() {
def a = template.getForEntity("http://localhost:8080", String.class)
println a
}
}
但是使用Spock时,应用程序无法启动:
@SpringApplicationConfiguration(classes = MyServer.class)@WebAppConfiguration
@IntegrationTest
class MyTestSpec extends Specification {
RestTemplate template = new TestRestTemplate();
def "Do my test"() {
setup:
def a = template.getForEntity("http://localhost:8080", String.class)
expect:
println a
}
}
对于Spock,我当然在我的Gradle构建文件中指定了适当的依赖项:
...dependencies {
testCompile 'org.spockframework:spock-core:0.7-groovy-2.0'
testCompile 'org.spockframework:spock-spring:0.7-groovy-2.0'
}
...
我想念什么吗?
回答:
问题在于Spock Spring正在寻找Spring的@ContextConfiguration
注解,而没有找到它。严格地说MyTestSpec
被
标注了@ContextConfiguration
,因为它是一个元注释@SpringApplicationConfiguration
,但斯波克Spring不考虑元注释作为其搜索的一部分。存在一个解决此限制的问题。同时,您可以解决它。
所有@SpringApplicationConfiguration
要做的就是@ContextConfiguration
使用特定于Boot的上下文加载器进行自定义。这意味着您可以通过使用适当配置的@ContextConfiguration
注释来达到相同的效果:
@ContextConfiguration(loader = SpringApplicationContextLoader.class, classes = MyServer.class)@WebAppConfiguration
@IntegrationTest
class MyTestSpec extends Specification {
…
}
只是要确保它是明确的(并且基于注释,不是),为此,您需要org.spockframework:spock-spring
在类路径中使用。
以上是 与Spring Boot和Spock的集成测试 的全部内容, 来源链接: utcz.com/qa/426283.html