我正在使用Grails 2.4.4进行申请。我为我的控制器写了一个集成测试。
class UserControllerIntegrationSpec extends IntegrationSpec {
UserController controller = new UserController()
void "test something"() {
when:
controller.request.method = 'POST'
controller.create()
then:
controller.response.status == HttpStatus.OK.value()
}
}
当我尝试使用IntelliJ运行测试时,我得到一个例外:
java.lang.IllegalStateException: Could not find ApplicationContext, configure Grails correctly first
at grails.util.Holders.getApplicationContext(Holders.java:97)
at grails.test.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy:41)
当我使用带test-app
命令的控制台运行集成测试时,没有问题。附:单元测试没有问题。
答案 0 :(得分:5)
您无法像在单元测试中那样在IDE中单独运行集成测试。集成测试环境的运行速度与运行run-app
的运行环境差不多,其中一个很大的区别就是没有Web服务器。
因此测试基础架构期望有一个Spring Application上下文(至少部分因此依赖注入将适用于测试类),GORM,插件等。所以你可以从IDE运行集成测试,但他们必须只需运行grails test-app
并为您捕获输出,就像在IDE中运行应用程序一样。
答案 1 :(得分:0)
现在不知道这个问题,但是对上述内容进行评论,我相信我能够在intellij中单独执行集成测试。
不确定你的设置是什么,这是我的大致:
重新制作的步骤:
试验:
package com.foo
import grails.test.spock.IntegrationSpec
import org.springframework.http.HttpStatus
class UserControllerIntegrationSpec extends IntegrationSpec {
UserController controller = new UserController()
void "test something"() {
when:
controller.request.method = 'POST'
controller.save()
then:
controller.response.status == HttpStatus.OK.value()
}
}
使用ctrl + shift + f10(运行上下文配置)执行,光标位于方法中。
测试结果:
|Running 1 integration test...
|Running 1 integration test... 1 of 1
--Output from test something--
Failure: |
test something(com.foo.UserControllerIntegrationSpec)
|
Condition not satisfied:
controller.response.status == HttpStatus.OK.value()
...
以下是来自.idea/workspace.xml
的代码段,似乎描述了测试配置:
<configuration default="false" name="test something()" type="GrailsRunConfigurationType" factoryName="Grails">
<module name="foo" />
<setting name="vmparams" value="-Dgrails.full.stacktrace=true" />
<setting name="cmdLine" value="test-app integration: "com.foo.UserControllerIntegrationSpec.test something" -echoOut" />
<setting name="depsClasspath" value="false" />
<setting name="passParentEnv" value="true" />
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<setting name="launchBrowser" value="false" />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
希望这有帮助