1

因此,我正在尝试测试以下 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 没有注册执行。

我错过了什么?我还需要做些什么来模拟域类方法吗?

这是一个带有代码的示例项目

4

0 回答 0