当测试中的方法包含闭包时,Spock测试

时间:2016-09-04 23:32:55

标签: unit-testing grails multi-tenant spock

我正在使用grails plugin multi-tenant-single-db。在这种情况下,我需要写一个spock测试,我们暂时删除租户限制。位置是我的租户,所以我的方法看起来像这样:

disabled

该方法按预期运行,但尝试将方法置于测试覆盖范围内,错误输出表明:

<button>

和源自那里的堆栈跟踪。

我需要存根吗? withoutTenantRestriction是我整个方法逻辑的包装。

更新: 测试代码如下所示:

def loadOjectDetails(){
       Location.withoutTenantRestriction{
          // code here to retrieve specific items to the object to be loaded
          render( template: "_loadDetails", model:[ ... ]
       }
}

1 个答案:

答案 0 :(得分:0)

是的!你应该在运行时而不是编译时创建它。 您可以将其存储如下:

Your_Domain.metaClass.withoutTenantRestriction{Closure closure ->
            closure.call()
}

这样您的常规代码就可以在测试用例中使用。另外,就像在withoutTenantRestriction中一样,它基本上会启动一个新的hibernate会话,这并不重要,因为现在你已经关闭了闭包,你可以执行所需的操作来代替仅调用closure.call()

此外,同样适用于withThisTenant

在集成测试中,您不需要像加载整个环境那样将其存根。

希望它有所帮助!!