【发布时间】:2014-07-03 16:39:09
【问题描述】:
我有一个命令对象,其中包含几个访问其他域对象的静态方法。
static def isAValidSerial(String serialReference) {
return InventoryMaster.partSerialReferenceList(null, serialReference).size() > 0
}
此方法由命令对象上的验证约束调用。
在单元测试中,我模拟了这种行为。
TransactionDetailCommand.metaClass.static.isAValidSerial = { String a -> println "mocked method called"; true }
在调用某些验证之前:
obj.validate(['serialReference'])
但是,这会引发 2.2.0 中没有的异常。
错误是:
java.lang.IllegalStateException: Method on class [com.myStuff.MyClass] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
尽管从验证器调用它时进行了模拟,但它似乎试图调用真实方法而不是模拟。如果我在 obj.validate() 之前放置一个显式 println ,它会正确打印来自模拟方法的测试文本并返回模拟值。这适用于 2.2,但现在失败了。我没有使用 grails update 命令。我创建了一个新项目并将内容复制到其中。我发现了各种技巧,包括从构建配置中删除分叉的 JVM 内容,但似乎没有任何效果。
任何人有什么想法吗?谢谢。
【问题讨论】:
标签: unit-testing grails spock