假设我有一个域a它对属性p有一个自定义验证器
static constraints = {
P validator: { val, obj ->
(A.executeQuery("SELECT COUNT(*) FROM A cei WHERE cei.event.id = ?", [val.id])[0] <= 1)
}
在单元测试中,我如何模拟域A的p属性,以便我在运行单元测试时不会得到我得到的错误。当运行单元测试时,我得到的错误如下所示。设置代码实例化域A,如下所示。
void setUp(){
inv = new A(P: rg).save(flush: true)
错误java.lang.UnsupportedOperationException: String-based queries like [executeQuery] are currently not supported in this implementation of GORM. Use criteria instead.
注意:这些是假代码。
对我来说,最好的选择是将验证器的内部代码封装在一个服务中。然后,在单元测试中模拟该服务。
但是抛出的错误是executeQuery不可用,但是criteria可用。因此,请更改代码以使用条件。
P validator: { val, obj ->
A.withCriteria{
eq('event', Event.findById(val.id))
projections{
count('id')
}
}[0] < = 1
}