如何在功能测试中访问grailsApplication和ApplicationContext

如何在功能测试中访问grailsApplication和ApplicationContext,grails,functional-testing,spock,applicationcontext,grails-config,Grails,Functional Testing,Spock,Applicationcontext,Grails Config,我正在构建一个GrailsREST应用程序,并使用Spock编写了功能测试。 请注意,这些功能测试仅适用于REST服务 class LoginFunctionalSpec extends Specification { def setUp() { // here I want to access grailsApplication.config } } 我已经尝试过以下方法: 注入grailsApplication(通过定义为类级变量),但没有注入任何get 使用Applica

我正在构建一个GrailsREST应用程序,并使用Spock编写了功能测试。 请注意,这些功能测试仅适用于REST服务

class LoginFunctionalSpec extends Specification {
  def setUp() {
    // here I want to access grailsApplication.config
  }
}
我已经尝试过以下方法:

  • 注入grailsApplication(通过定义为类级变量),但没有注入任何get
  • 使用ApplicationHolder.application.config,但它已被弃用,建议的方法是前一点
  • 尝试使用plugin remote-control:1.4,但尽管grails控制台显示插件已安装,但我没有找到RemoteControl类。而且我从来都不确定这种方法
  • 我尝试将grails app/conf/Config.groovy作为一个文件读取(如前所述),但得到了一个FileNotFoundException
  • 但它们都没有在功能测试中为我提供grailsApplication.config。

    有没有办法做到这一点

    更新 @德马哈帕特罗

    我没有使用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不为功能测试提供直接支持。您需要使用进行适当的功能测试。

    您是在集成测试阶段还是在功能测试阶段运行测试


    您需要从扩展到在集成测试阶段实现自动布线,但这里讨论的是功能测试。。。由于grails在与被测应用程序相同的JVM中运行您的测试,因此您实际上不需要使用远程控制,但我总是在功能测试中使用远程控制,因为它对我来说似乎更干净,而且如果您的测试和被测应用程序不在同一JVM中运行,它是一种非常强大的技术。

    我已更新了描述听你的建议。(我的情况下不需要Geb,自动注入也不起作用)@ssinghal我的意思是你不需要
    def grailsApplication
    。默认情况下,它可用于测试。@ssinghal您需要
    @TestFor
    才能使用规范中默认的
    grailsApplication