Reputation: 1697
Although I followed the Spring Boot Guide, when trying:
@SpringApplicationConfiguration(classes=MainWebApplication.class, initializers = ConfigFileApplicationContextInitializer.class)
@WebAppConfiguration
@ActiveProfiles("integration-test")
class FirstSpec extends Specification{
@Autowired
WebApplicationContext webApplicationContext
@Shared
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build()
def "Root returns 200 - OK"(){
when:
response = mockMvc.perform(get("/"))
then:
response.andExpect(status().isOk())
}
}
I just get the message that a WebApplicationContext just is not injected. I do have
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-maven</artifactId>
<version>0.7-groovy-2.0</version>
</dependency>
In my .pom, also, just as the guide advises, yet still no success. Anything I am missing? I need the app context so all the beans are injected. Any ideas?
Upvotes: 5
Views: 1923
Reputation: 526
You could also use SpringBean annotation available in Spock 1.2: https://objectpartners.com/2018/06/14/spock-1-2-annotations-for-spring-integration-testing/
it could be easier with this :
@SpringApplicationConfiguration(classes=MainWebApplication.class, initializers = ConfigFileApplicationContextInitializer.class)
@WebMvcTest
@AutoConfigureMockMvc
@WebAppConfiguration
@ActiveProfiles("integration-test")
class FirstSpec extends Specification{
@Autowired
WebApplicationContext webApplicationContext
@Autowired
MockMvc mockMvc
// if any service to mock
@SpringBean
MyService myService
def "Root returns 200 - OK"(){
when:
response = mockMvc.perform(get("/"))
then:
response.andExpect(status().isOk())
}
}
If you don't want to mock your services you can use directly @SpringBootTest which does the same job with only one annotation
@SpringBootTest(webEnvironment = RANDOM_PORT)
@ActiveProfiles("integration-test")
class FirstSpec extends Specification{
@Autowired
WebApplicationContext webApplicationContext
@Autowired
MockMvc mockMvc
// if any service to mock
@SpringBean
MyService myService
def "Root returns 200 - OK"(){
when:
response = mockMvc.perform(get("/"))
then:
response.andExpect(status().isOk())
}
}
Upvotes: 0
Reputation: 1068
Can you try moving the mockMvc construction to the setup
method?
def setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build()
}
Upvotes: 2