3

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

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

我已经尝试过以下方法:

  1. 注入 grailsApplication (通过定义为类级变量),但没有注入任何东西。
  2. 使用 ApplicationHolder.application.config 但它已被弃用,建议的方法是前一点。
  3. 尝试使用插件远程控制: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,说正在对空对象调用配置属性。

4

2 回答 2

3

我认为你不需要明确地注入任何东西。grailsApplication默认情况下在测试中可用。

class LoginFunctionalSpec extends Specification {
  def setUp() {
     grailsApplication.config.blah //should work
  }
}

注意-Spock
不提供对功能测试的直接支持。您需要使用Geb进行适当的功能测试。

于 2013-09-04T14:04:36.960 回答
1

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

您需要从IntegrationSpec扩展以在集成测试阶段进行自动装配,但您在这里谈论的是功能测试......因为 grails 在与被测应用程序相同的 JVM 中运行您的测试,您实际上并不需要使用 RemoteControl,但我无论如何,在我的功能测试中总是这样做,因为它对我来说似乎更干净,并且如果您的测试和被测应用程序不在同一个 JVM 中运行,它是一种非常强大的技术。

于 2013-09-08T21:37:44.167 回答