假设我有一个域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.
注意:这些是假代码。
答案 0 :(得分:2)
对我来说,最好的选择是将验证器的内部代码封装在服务中。然后,在单元测试中模拟该服务。
但抛出的错误是executeQuery不可用,但标准是。 因此,请更改代码以使用条件。
P validator: { val, obj ->
A.withCriteria{
eq('event', Event.findById(val.id))
projections{
count('id')
}
}[0] < = 1
}