Unit testing grails-单元测试

Unit testing grails-单元测试,unit-testing,grails-domain-class,Unit Testing,Grails Domain Class,我很难对域中包含的方法进行单元测试,如下所示: 这是域类 class UserRole implements Serializable { User user Role role static void removeAll(User user) { executeUpdate 'DELETE FROM UserRole WHERE user=:user', [user: user] } } 然后在服务中: class Co

我很难对域中包含的方法进行单元测试,如下所示:

这是域类

class UserRole implements Serializable {

    User user
    Role role

        static void removeAll(User user) {
          executeUpdate 'DELETE FROM UserRole WHERE user=:user', [user: user]
        }
}
然后在服务中:

class CorporateUserService {
   def delete (def cifUserInstance) {
    def userDetail,users,userRole
    userDetail=UserDetails.findById(cifUserInstance.userDetails.id)
    users=User.findById(userDetail.user.id)
    userRole=UserRole.removeAll(users)
   }
}
在单元测试中:

void testDelete(){
   def cifUserService = new CorporateUserService()
   mockDomain(UserRole,[])
   def newuserRole2=UserRole.create(user,role2)
   def newuserRole=UserRole.create(user,role)
   newuserRole.executeUpdate 'DELETE FROM UserRole WHERE user= :user',[user: user]
    try{
        cifUserInstance = cifUserService.delete(cifUser)
    }
    catch(RuntimeException e){
        println e
    }
}
我有这样一个错误:

“groovy.lang.MissingMethodException: 无方法签名: com.logika.corp.security.UserRole.executeUpdate() 适用于参数类型: (java.lang.String, java.util.LinkedHashMap)值: [从用户角色中删除,其中用户= :user,[user:user1]]

有人知道如何修复这个错误吗

试试看:

newuserRole.executeUpdate 'DELETE FROM UserRole WHERE user= :user',user
看见


我希望有帮助

这里的问题是Grails在运行时添加了很多动态方法。mockDomain()方法添加动态findBy。。。方法等,但它没有添加executeUpdate动态方法

所以你有两个选择

1/将单元测试移动到集成测试文件夹。这样grails就创建了一个完整的运行时环境,并将添加所有动态类。(以牺牲较慢的运行时间为代价)

2/模拟executeUpdate的行为,以便您只需测试自己的代码。(您不一定要对grails代码进行单元测试?) e、 g

registerMetaClass(UserRole )
UserRole.metaClass.static.executeUpdate={String query, Map items-> println "Mocking executeUpdate"}