我正在构建一个Grails REST应用程序,并使用Spock编写了我的功能测试。请注意,这些功能测试仅针对REST服务。
class LoginFunctionalSpec extends Specification {
def setUp() {
// here I want to access grailsApplication.config
}
}
我已经尝试了以下方法:
- 注入grailsApplication(通过定义为类级变量),但没有注入任何东西
- 使用ApplicationHolder.application.config,但它已被弃用,建议的方法是前一点
- 尝试使用插件RemoteControl:1.4,但尽管grails控制台显示插件已安装,但我没有找到RemoteControl类。而且我从来都不确定这种方法
- 我尝试将grails app/conf/Config.groovy作为一个文件读取(如这里所解释的),但得到了一个FileNotFoundException
但它们都没有在功能测试中为我提供grailsApplication.config
有什么办法做到这一点吗?
更新
@dmahapatro
我没有使用Geb,因为我正在测试REST服务,并且不需要浏览器自动化。
正如我在第1点中所说,grails应用程序不是自动注入的。
class LoginFunctionalSpec extends Specification {
def grailsApplication
def setUp() {
def port = grailsApplication.config.mongo.port //throws NPE
}
}
它抛出一个NPE,表示正在null对象上调用config属性。
我认为您不需要显式地注入任何内容。默认情况下,grailsApplication
在测试中可用。
class LoginFunctionalSpec extends Specification {
def setUp() {
grailsApplication.config.blah //should work
}
}
注意-
Spock不直接支持功能测试。您需要使用Geb进行适当的功能测试。
您是在集成测试阶段还是在功能测试阶段运行测试?
您需要从IntegrationSpec进行扩展,以便在integraton测试阶段实现自动布线,但您在这里谈论的是功能测试。。。因为grails在与被测应用程序相同的JVM中运行测试,所以您实际上不需要使用RemoteControl,但我在功能测试中总是这样做,因为这对我来说似乎更干净,如果您的测试和被测应用不在同一JVM中运行,这是一种非常强大的技术。