Unit testing grails域类未模拟
我试图在Grails2.2.1应用程序中模拟shiro插件生成的角色类。当我运行单元测试时,我得到了这个错误,看起来好像没有添加动力学方法 这是角色类: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
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
。