0
我有一个创建,像这样的可选参数条件查询一个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
和标准物体之间的相互作用断言。
我缺少什么?
您应该使用一个集成测试 –
你真的不希望测试标准是否奏效......您想测试您制作的标准是否会找到您想要的。创建一些假汽车,然后通过传递一些参数来运行该方法,并查看是否有正确的汽车结果。 – billjamesdev
@billjamesdev这听起来很奇怪。通过做一个实际的查询并执行它,我实际上正在测试标准类,而我想测试的是该对象被正确创建并且预期的方法被调用。我实际上正在寻找一种方法来避免完整的集成测试,因为这种逻辑不依赖于持久层。 – Raibaz