Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing grails域类未模拟_Unit Testing_Grails_Mocking - Fatal编程技术网

Unit testing grails域类未模拟

Unit testing grails域类未模拟,unit-testing,grails,mocking,Unit Testing,Grails,Mocking,我试图在Grails2.2.1应用程序中模拟shiro插件生成的角色类。当我运行单元测试时,我得到了这个错误,看起来好像没有添加动力学方法 这是角色类: class Role { String name static hasMany = [ users: User, permissions: String ] static belongsTo = User static constraints = { name nullable: false

我试图在Grails2.2.1应用程序中模拟shiro插件生成的角色类。当我运行单元测试时,我得到了这个错误,看起来好像没有添加动力学方法

这是角色类:

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关闭的。也许它又被打开了。

AFAIK,
hasMany
语句应该用于连接给定类与其他Grails域类,而不是其他对象。如果需要将权限列表保存为字符串对象,则需要在hasMany块之外创建(并处理!)该字符串列表;大概是这样的:

class Role {
    String name

    List<String> permissions 

    static hasMany = [ users: User ]

    static belongsTo = User

    static constraints = {
        name nullable: false, blank: false, unique: true
    } 
}
类角色{
字符串名
列出权限
静态hasMany=[用户:用户]
静态belongsTo=用户
静态约束={
名称可空:false,空白:false,唯一:true
} 
}

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

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

好吧,在我的情况下,shiro安全插件更适合。。。这是插件生成的角色类。我做了您建议的修改,但我得到了相同的错误,错误表明动态方法丢失了您是在单元测试
还是
服务
?我认为如果是服务,那么
@TestFor
就足够了,您不需要
@TestMixin