【发布时间】:2011-08-05 15:21:35
【问题描述】:
我正在为一些简单的方法编写单元测试。我遇到的问题是“保存”不适用于我的域对象,即使应该模拟域。在域对象上调用 validate 时,它返回为真。我什至用 try/catch 包围了对象,以确保它没有抛出任何奇怪的错误,但事实并非如此。下面的代码用于调用和测试。
void test()
{
mockDomain(MyDomain)
Map map1= ["asdf":" "]
Map map2 = ["asdf":123]
InputObject input = new InputObject()
input.setForeignId("1") //not a constraint
input.setMap1(map1)
input.setMap2(map2 )
service.methodUnderTest(profile)
List list = MyDomain.getAll()
assertEquals 1, l.size() //FAILS
}
def persistPublishGuids(InputObject input)
{
try{
HashMap map1 = input.map1
for ( e in map1 )
{
String key= e.getKey()
String value = e.value
long size = input.map2.get(key)
MyDomain domain = new MyDomain (id:guid, field1:value, field2:input.foreignId, field3:size)
domain.save()
}
} catch(ex)
{
ex.printStackTrace()
}
}
【问题讨论】:
-
如果这是sscce 可能会有所帮助。您发布的内容无法自行运行。尝试生成最简单的示例来执行和重现问题并发布。这样做有可能你会发现问题的根源,如果没有,你会有一个更清晰的例子来帮助别人。
-
我会的,但我想通了。需要运行 grails clean,然后在 STS 中清理/重建项目。我之所以发现这一点,是因为当我今天早上开始编写另一个测试时,它声称我的一个域对象上没有方法“save()”。谷歌搜索让我找到了干净和重建的解决方案。
标签: unit-testing grails mocking