在 Grails 服务中创建测试标准

Testing criteria creation in a Grails service

我有一个 Grails 服务,它使用如下可选参数创建条件查询:

List<Car> search(String make = "%", String model = "%", Integer year = null) {
    def c = Car.createCriteria()

    return c.list() {
        if(make) {
            like("make", make)
        }
        if(model) {
            like("model", model)
        }
        if(year) {
            eq("year", year)
        }
    }
}

(此外,这是在 grails 中执行此操作的惯用方法吗?我对框架很陌生,我正在尝试找到正确的方法来做事)

我想测试是否根据 search 方法的参数值设置了正确的条件过滤器,但我没有成功。

我尝试了一些变体:

@TestFor(CarService)
@Mock(Car)
class CarServiceSpec extends Specification {
    def car = Mock(Car)
    void "empty filters"() {
        when: service.search()
        then:
        with(car.createCriteria()) {
            0 * like(*_)
            0 * eq(*_)
        }
    }
}

但我似乎无法找到一种方法来对 CarService 和条件对象之间的交互进行断言。

我错过了什么?

Grails Where 查询而不是 Criteria 查询似乎是在 Grails 中执行此操作的惯用方式的更好选择:

Gorm Where Query