Grails控制器单元测试在命令行上传递,而不是在Intellij中传递

Grails控制器单元测试在命令行上传递,而不是在Intellij中传递,grails,groovy,junit,intellij-idea,spock,Grails,Groovy,Junit,Intellij Idea,Spock,我正在使用Grails2.3.8,最近我开始修复一些过时的测试,这些测试在过去的两个Grails2.3.x版本中停止工作 在Spock控制器测试期间,以及在使用来自控制器的域实例进行响应时,根据测试执行环境对模型的断言失败/通过。具体来说,当使用Grails控制台vs IntelliJ(Junit)执行测试时,模型上的域实例具有不同的属性名 我在我的Spock规范中的then或expect块中进行了这种类型的断言,以此对冲风险: void“显示操作正确处理有效实例”(){ 给定:“有效的域实例”

我正在使用Grails2.3.8,最近我开始修复一些过时的测试,这些测试在过去的两个Grails2.3.x版本中停止工作

在Spock控制器测试期间,以及在使用来自控制器的域实例进行响应时,根据测试执行环境对模型的断言失败/通过。具体来说,当使用Grails控制台vs IntelliJ(Junit)执行测试时,模型上的域实例具有不同的属性名

我在我的Spock规范中的then或expect块中进行了这种类型的断言,以此对冲风险:

void“显示操作正确处理有效实例”(){
给定:“有效的域实例”
def myDomainObject=MyDomainClass.build()
当:“使用有效的域实例调用show操作”
controller.show(myDomainObject)
然后:“使用模型上设置的域实例响应show视图”
视图==“显示”
//属性名称在一个环境中以“Instance”结尾,而在另一个环境中不以“Instance”结尾
model.myDomainObjectInstance?:model.myDomainObject==myDomainObject
}

不确定这是否是一个问题,但我认为您应该将控制器的响应保存在一个变量中,并使用renderags变量访问视图:

void“show action正确处理有效实例”(){

}


不确定这是否是问题。

模型不是空的,并且包含实例,断言
view=='show'
通过。问题是,当从命令行运行时,用于访问实例(在模型上)的属性名是“myDomainObject”,但在IntelliJ中运行时,它是“myDomainObjectInstance”。目前,a有几十个这样的测试通过,但这仅仅是因为我明确断言“myDomainObject”等于“model.myDomainObjectInstance”或“model.myDomainObject”。我不清楚为什么会发生这种情况。我会尝试检查intellij项目中的库和命令行选项之间的差异。根据我上面的评论,我认为我倾向于这样。投反对票的人能否解释一下原因?我不想争论,但我想知道我的文章中是否有错误或遗漏的地方,可能有助于其他人理解和回应。我会再次检查两种环境中使用的grails版本是否相同。结果很容易不匹配,我希望是这样的小事,但我感觉这与Intellij中Grails环境的配置方式有关。在我们的生产环境中,一切正常。一旦我在下一次冲刺中有了时间,我将试图找到问题的根源。有什么消息吗?我也有同样的问题。我也不想通过破解我的测试代码来实现这一点。出于这个原因,我一直在Intellij中通过命令行界面运行测试。
given: "a valid domain instance"

    def myDomainObject = MyDomainClass.build()

when: "calling the show action with a valid domain instance"

    def model = controller.show(myDomainObject)

then: "respond to the show view with the domain instance set on the model"

    renderArgs.view == ‘show’
    // the property name ends with ‘Instance’ in one env and not in the other                        
    model.myDomainObjectInstance ?: model.myDomainObject == myDomainObject