0

Grails 2.2.1 アプリで shiro プラグインによって生成された Role クラスをモックしようとしています。単体テストを実行すると、ダイナミクス メソッドが追加されていないように見えるこのエラーが発生します。

これは Role クラスです:

class Role {
    String name

    static hasMany = [ users: User, permissions: String ]

    static belongsTo = User

    static constraints = {
        name nullable: false, blank: false, unique: true
    } 
}

これは単体テストです:

@TestFor(UserService) 
@TestMixin(DomainClassUnitTestMixin)
@Mock([User, Role])
class UserServiceTests {
    void testSaveFacebookUser(){ 
        //given
        def adminRole = new Role(name: RoleEnum.ADMIN.name)
        adminRole.addToPermissions("*:*")
        adminRole.save()
    }
}

スタックトレース:

Running 1 unit test... 1 of 1
Failure:  testSaveFacebookUser(a4o.services.UserServiceTests)
  groovy.lang.MissingMethodException: No signature of method: a4o.Role.addToPermissions() is applicable 
  for argument types: (java.lang.String) values: [*:*]

アップデート

JIRAでこれを見つけましたが、2.0.4 http://jira.grails.org/browse/GRAILS-8779で閉鎖されたと書かれています。もしかしたらまた開いてるかも。

4

2 に答える 2

0

私の知る限り、hasManyステートメントは、特定のクラスを他のオブジェクトではなく、他のGrailsドメインクラスに接続するために使用されることになっています。権限のリストを String オブジェクトとして保存する必要がある場合は、 hasMany ブロックの外側でその文字列のリストを作成 (および処理) する必要があります。このようなもの:

class Role {
    String name

    List<String> permissions 

    static hasMany = [ users: User ]

    static belongsTo = User

    static constraints = {
        name nullable: false, blank: false, unique: true
    } 
}

とにかく、私の提案は車輪を再発明せず、スプリント セキュリティ プラグイン(または選択した別のもの) を使用することです。

于 2013-05-10T16:54:37.877 に答える
0

grails 2.2.2 にアップグレードすると、この問題が解決しました

于 2013-05-12T18:50:38.607 に答える