在 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 中执行此操作的惯用方式的更好选择:
我有一个 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 中执行此操作的惯用方式的更好选择: