grails - 标准的单元测试模拟

我是新手,尝试为Service类编写单元测试具有方法,它在域对象上调用条件。

如何在以下服务类方法中模拟域行为?

{def checkForDuplicates(firstName, lastName, gender, birthDate, accountId){
 def duplicateIndividual = Individual.withCriteria{
           eq('firstName',firstName)
           eq('lastName',lastName)
           eq('gender',gender)
           eq('birthDate',birthDate)
           and{
               accounts{
                   eq('id', accountId)
               }
           }
    }

    if(duplicateIndividual){
        log.error("Found duplicate for ${duplicateIndividual.firstName}
      ${duplicateIndividual.lastName}")
        return true
    }
    return false
}"

最佳答案

在grails 2中,您可以使用Mock()功能和mockDomain来设置您的条件,

@TestFor(MyService)
@Mock(Individual)

然后,您可以正常创建域类。

http://grails.org/doc/latest/guide/single.html#unitTestingDomains

在grails 2之前,您可以更改查询的metaClass,例如
Individual.metaClass.static.withCriteria = { [ i1, i2 ] }

https://stackoverflow.com/questions/9695335/

相关文章:

grails - 将grails选择值传递给actionSubmit to Javascript方法

grails - Grails 中是否有首选/标准方式将表单参数绑定(bind)到域对象列表?

unit-testing - 如何编写Grails delete()方法的测试

grails - Grails url映射从sperate配置文件传递数据

grails - Grails的 Controller

grails - 对grails的 Ant 调用因 “[exec] Application is p

grails - User.get()在Grails 2.0中损坏,返回null

hibernate - 复合键另存为null

grails - Grails 1.3.7如何在不进行任何缓冲的情况下直接写入输出流

grails - 如何从 grails 查询中访问属性