因此,我正在尝试测试以下 Grails 服务实现:
class BookService {
def searchBooks(String search) {
if (!search) {
return []
}
Book.searchBooks(search)
}
}
它使用 Book 域类中定义的方法:
class Book {
String title
static def searchBooks(String search) {
Book.findByTitleLike(search)
}
}
所以,这是我一直在尝试的测试代码:
@TestFor(BookService)
@Mock(Book)
class BookServiceSpec extends Specification {
void "should search books"() {
setup:
new Book(title: 'The Stand').save()
new Book(title: 'Under the Dome').save()
new Book(title: 'Bag of Bones').save()
when:
service.searchBooks('ones')
then:
1 * Book.searchBooks()
}
}
但是,它总是失败:
Too few invocations for:
1 * Book.searchBooks() (0 invocations)
我已经调试了在 IDE 中运行的代码,并且该方法似乎确实被执行了,但是 Spock 没有注册执行。
我错过了什么?我还需要做些什么来模拟域类方法吗?