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



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

class LoginFunctionalSpec extends Specification {
  def setUp() {
    // here I want to access grailsApplication.config
  }
}

我已经尝试了以下方法:

  1. 注入grailsApplication(通过定义为类级变量),但没有注入任何东西
  2. 使用ApplicationHolder.application.config,但它已被弃用,建议的方法是前一点
  3. 尝试使用插件RemoteControl:1.4,但尽管grails控制台显示插件已安装,但我没有找到RemoteControl类。而且我从来都不确定这种方法
  4. 我尝试将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中运行,这是一种非常强大的技术。

相关内容

  • 没有找到相关文章

最新更新