使用Spock运行集成测试(例如@IntegrationTest
)的最佳方法是什么?我想引导整个Spring Boot应用程序并执行一些HTTP调用来测试整个功能。
- Sping Boot 应用程序在此工作的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'
}
...
4条答案
按热度按时间lp0sw83n1#
问题是Spock Spring正在寻找Spring的
@ContextConfiguration
注解,但没有找到它。严格地说,MyTestSpec
* 是用@ContextConfiguration
注解的,因为它是@SpringApplicationConfiguration
上的元注解,但Spock Spring不认为元注解是其搜索的一部分。有一个issue来解决这个限制。与此同时,你可以围绕它工作。@SpringApplicationConfiguration
所做的一切就是使用特定于Boot的上下文加载器定制@ContextConfiguration
。这意味着您可以通过使用适当配置的@ContextConfiguration
注解来实现相同的效果:**更新:**只是为了确保它是清晰的(根据评论,它不是),要使其工作,您需要在类路径上有
org.spockframework:spock-spring
。jrcvhitl2#
理想情况下,您将使用Sping Boot 1.4+和Spock 1.1+。
Sping Boot 添加了很多有用的注解。除了@伊格纳西奥.suay提到的
@SpringBootTest
之外,他们还添加了@TestConfiguration
,如果您想在集成测试中使用Spring mock而不是Mockito,这将非常有用。如果您将
@TestConfiguration
与新的SpockDetachedMockFactory
结合,那么您就拥有了将Spock Mocks注入Spring上下文所需的所有组件。我在这里有一个带有示例代码的博客文章:Spring Integration Testing with Spock Mocks。
快速和肮脏的是这个
更新有a PR,可以在Spock中获得更多的原生支持,以便将Spock Mocks注入Spring上下文进行集成测试。新的
@SpringBean
和@SpringSpy
将类似于@MockBean
和@SpyBean
注解更新Spock 1.2现在应该包含这些更改。在文档更新之前,这里是一个preview of the Spock 1.2 Annotations for Spring Integration Testing。
dm7nw8vv3#
在新的Sping Boot 版本(1.4)中,而不是使用:
你可以用
您将能够启动应用程序上下文并设置任何依赖项。
有关详细信息,请查看以下示例:http://ignaciosuay.com/how-to-do-integration-tests-with-spring-boot-and-spock/
jutyujz04#
下面是一个启动 Boot 应用程序然后运行spock测试的设置:
记住在
build.gradle
中添加对spock和groovy的依赖项。