如何使用Spock测试使用域类中的静态方法的Grails服务方法?

时间:2013-07-24 18:09:18

标签: grails spock

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

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

Here is a sample project with the code

0 个答案:

没有答案