1

Groovy & Grails は初めてです。私は、Grails のサンプルの 1 対多の関係の 1 つに取り組んでいます。

以下がコードです。

class User {

    //properties
    String login
    String password
    String role

    //constraints and order of display of fields in UI
    static constraints = {
        login(blank: false, nullable: false, unique: true)
        password(blank: false, nullable: false, password: true)
        role(inList:["Admin", "Member"])
    }

    static hasMany = [posts : Post]
}


class Post {
    String content
    Date dateCreated

    static constraints = {
        content(blank: true)
    }

    static belongsTo = [user : User]
}

Groovy での私のテスト クラス

@TestFor(User)
class UserTests {

    void testUserToPost() {

        def user = new User(login: "joe", password: "joe", role:"Admin")
        user.addToPosts(new Post(content: "First"));
        user.addToPosts(new Post(content: "Second"));
        user.addToPosts(new Post(content: "Third"));
        user.save(flush: true)
        assertEquals 3, User.get(user.id).posts.size()

    }
}

テスト クラスの実行中に、次の例外が発生します。

groovy.lang.MissingMethodException: No signature of method: com.library.forum.User.addToPosts() is applicable for argument types: (com.library.forum.Post) values: [com.library.forum.Post : (unsaved)]
Possible solutions: getPosts() at com.library.forum.UserTests.testUserToPost(UserTests.groovy:17)

コードのどこに問題があるか教えてください。

4

2 に答える 2

4

Grails 2.1.4 以降、パフォーマンスの問題によりモックの動作が変更されました。したがって、モックされたエンティティに関連付けられているすべてのエンティティをモックする必要があります。

GRAILS-9637 を参照してください - パフォーマンスの問題により、@Mock はモックされたエンティティの関連付けられたエンティティをモックしなくなりました。これらは手動で指定する必要があります。たとえば、次のテストは 2.1.4 以降では失敗します。

@Mock(Author)
void testAddToBooks() {
    def a = new Author()
    a.addToBooks(new Book())
}

上記のテストを修正するには、Author と Book の両方をモックする必要があります。

@Mock([Author, Book])
void testAddToBooks() {
    def a = new Author()
    a.addToBooks(new Book())
}

この参照を確認できます。

于 2013-07-30T03:14:12.007 に答える