与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

回到顶部