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