在Grails服务中创建测试条件

时间:2017-08-09 12:03:04

标签: unit-testing grails groovy spock

我有一个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和标准对象之间的相互作用进行断言。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

Gorm Where Query