0

我正在尝试在 Grails 2.2.1 应用程序中模拟由 shiro 插件生成的 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

AFAIK,该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
    } 
}

无论如何,我的建议是不要重新发明轮子并使用sprint 安全插件(或您选择的另一个)。

于 2013-05-10T16:54:37.877 回答
0

升级到 grails 2.2.2 解决了这个问题

于 2013-05-12T18:50:38.607 回答