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