unit-testing - 在Grails服务中测试标准创建

标签 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)
        }
    }
}

(也是,这是惯用的方法吗?我对框架还很陌生,我正在尝试找到正确的方法来做这件事)

我想测试是否根据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中的一种惯用方式,Grails Where查询而不是Criteria查询似乎是更好的选择:

Gorm Where Query

关于unit-testing - 在Grails服务中测试标准创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45590156/

相关文章:

selenium - 如何排除 Geb 中的测试?

asp.net-mvc - 在 Controller 上使用依赖注入(inject)进行单元测试

sorting - Grails 2.3.4 排序/FindAll 更改

json - Grails 2.5.6 如何解析请求 JSON 并将其映射到 POGO?

grails - 在 grails 中记录

groovy - Groovy 中的 __LINE__ 功能

Django 单元测试 : South-migrated DB works in MySQL, 在 PostGreSQL 中抛出重复的 PK 错误。我错过了什么还是这是一个错误?

java - 如何测试文件提取

c# - OO 中的单元测试和访问修饰符

java - 如何使用 java.nio.Files 创建软符号链接(symbolic link)