【问题标题】:Testing my controller with Spock用 Spock 测试我的控制器
【发布时间】:2012-03-22 14:54:09
【问题描述】:

我需要测试一个控制器,动作 index(由 grails generate-all 命令生成)。我有一个这样的测试(在 Spock 中):

package mnm.schedule

import grails.test.mixin.*
import org.junit.*
import grails.plugin.spock.*
import spock.lang.Specification
import org.example.*;

class UserControllerSpec extends ControllerSpec {


def "test"() {
            setup:
            mockLogging(UserController, true)

            when:
            controller.index()

            then:
            redirectArgs.action == "list"
    }

} 

我收到这样的错误:

Error Error running script test-app :spock : cannot find shared instance field (Use --stacktrace to see the full trace)

过了一段时间我可以运行测试,测试就通过了。

究竟出了什么问题?为什么第一次显示该错误?我是 Spock 环境的新手。

提前致谢。

【问题讨论】:

  • 采纳错误建议并使用 --stacktrace 选项运行测试。这将为您提供比我们的水晶球更多的信息。
  • 您的目标是哪个版本的 Grails?如果是 2.x.x,请尝试使用 @TestFor(UserController) 类级别注释
  • @Esteban :是的,你是对的。有效。为什么你不能把它作为答案?
  • 你去!我不确定您使用的是哪个版本,所以我避免发布无用的答案。很高兴能帮上忙!

标签: unit-testing grails groovy spock


【解决方案1】:

鉴于您使用的是 Grails 2.x.x,您应该使用 @TestFor 注释,它可以通过 mixins 增强单元测试框架类。

在您的情况下,您应该添加@TestFor(UserController) 作为类级别的注释,这样您就可以使用mockLogging 方法。

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多