【发布时间】:2013-04-24 15:46:22
【问题描述】:
我在尝试对服务类 api 进行单元测试时遇到问题
MyService.groovy
public int myMethod() {
def cr = MyDomain.createCriteria()
def myDomainCount = cr.count {
isNull("column1")
}
return myDomainCount
}
MyTestClass.groovy
class MyTestClassTests extends GrailsUnitTestCase {
void testMyCount() {
mockDomain(MyDomain)
myCriteria = [count :{Closure cls -> 10}]
MyDomain.metaClass.static.createCriteria = {myCriteria}
int cnt = new MyService().myMethod()
assert 10 == cnt
}
}
执行 myMethod() 时执行上述测试方法失败。失败就行了
cr.count {
isNull("column1")
}
我在执行过程中得到的堆栈跟踪:
groovy.lang.MissingMethodException: No signature of method: com.MyService.isNull() is applicable for argument types: (java.lang.String) values: [column1]
Possible solutions: findAll(), findAll(groovy.lang.Closure), is(java.lang.Object), isCase(java.lang.Object) at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78) at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
注意:如果我在两个地方(服务类和测试类)都使用cr.list,则相同的测试用例可以正常工作。我不知道为什么它在计数期间失败??????!!!!!!
任何想法都会有很大帮助。在此先感谢。
【问题讨论】:
-
什么版本的grails?
-
我正在使用 grails 2.2.0