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

标签 grails functional-testing spock applicationcontext grails-config

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

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

我已经尝试过以下方法:

  1. 注入(inject) grailsApplication(通过定义为类级变量),但没有注入(inject)任何东西。
  2. 使用 ApplicationHolder.application.config,但它已被弃用,建议的方法是前一点。
  3. 尝试使用插件 remote-control:1.4,但尽管 grails 控制台显示插件已安装,但我没有找到 RemoteControl 类。我也从来不确定这种方法
  4. 我尝试将 grails-app/conf/Config.groovy 作为文件读取(如 here 所述),但遇到了 FileNotFoundException。

但它们都没有在我的功能测试中提供 grailsApplication.config。

有什么办法可以实现吗?

更新

@dmahapatro

我没有使用 Geb,因为我正在测试 REST 服务并且不需要浏览器自动化。

正如我在第 1 点中所说,grails 应用程序未被自动注入(inject)。

class LoginFunctionalSpec extends Specification {
  def grailsApplication

  def setUp() {
     def port = grailsApplication.config.mongo.port //throws NPE
  }
}

它抛出一个 NPE,表示正在对空对象调用配置属性。

最佳答案

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

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

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

关于grails - 如何在功能测试中访问 grailsApplication 和 ApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614893/

相关文章:

hibernate - Grails/GORM/Hibernate 应用程序不是 SQL 转义输入数据

android - 在为 Android 进行 Espresso 功能测试时让 Dagger 注入(inject)模拟对象

groovy - 在 Groovy/Spock 中断言调用方法不会被执行

spring - Grails 3.0.9 : Spock integration tests' @Rollback annotation is not working

grails - 测试 grails Controller 抛出 java.NullPointerException

grails - Remote 插件可以与Grails 3一起使用吗?

hibernate - Grails hasMany关联检查

javascript - Grails:如何根据 GSP 表单中的选择显示数据源中的数据

python - 具有基于文件的电子邮件后端服务器的 Django 测试框架

java - 如何简化 Java 中无副作用方法的测试?