【问题标题】:Spock test cases doesn't make a relationship of domain classes in Grails?Spock 测试用例不会在 Grails 中建立域类的关系?
【发布时间】:2012-04-12 07:34:49
【问题描述】:

我有一个 Spock 测试用例,其中 setup 块如下所示:

setup: "set the required objects"
        def company = new Company(shortName:"infyyy",fullName:"infoysys",
            region:"tamilnadu" ,email:"a@ac.com" ,telphone:34343433,fax:34343433).save(failOnError:true)
        def project = new Project(name:"testing")
        def userInstance = new User(username:username,password:password,
            company:company,project:project,pt:["dummy"]).save(failOnError:true)
        def tasksInstance = new Tasks(title:"testingwork",startDate:(new Date()-4),endDate:(new Date().clearTime()-6),description:"blah blah",project:project,completed:true,user:userInstance).save(failOnError:true)

此外,Tasks 域类看起来像这样:

class Tasks {
    static belongsTo = [ user : User, project: Project ]
        //other code
}

User 类是这样的:

class User  {
        static hasMany = [ holidays : Holiday, tasks : Tasks, pt:String, project: Project ]
        //other code
}

但是当我运行我的测试并且我的测试失败(没有出现错误消息,但它在我的 Spock 测试的 then 块中失败)并且我发现其中有错误。我的设置不会在UserTasks 之间创建任何关系,这使我的测试失败。

我要测试的控制器代码是:

def todaysTasks() {
        def user = User.get(springSecurityService.principal.id)
        def choice = params.managersProject
        params.max = Math.min(params.max ? params.int('max') : 10,100)
        def search = Tasks.createCriteria().list(max: params.max as Integer, offset: params.offset as Integer, order: params.order as String, sort : params.sort) {
            and {
                  project {
                      like('name',"${choice}")
                  }
                  eq('endDate', new Date().clearTime())
            }
        }
        println "todays task selected project is " + search
        [tasksInstanceList : search, tasksInstanceTotal: search.getTotalCount() ]
    }

上述测试中的println 打印出0。即使我在测试中将endDate 设置为小于今天的日期,为什么会发生这种情况? 提前致谢。

【问题讨论】:

  • 您需要提供更多详细信息。请使用堆栈跟踪发布失败的测试和错误消息。

标签: grails spock


【解决方案1】:

据我所知,GORM 不会通过遵循 belongsTo 关系来自动填充关系。

我总是做以下事情。

def u=new User(...)
u.addToTasks(
   title:"testingwork",
   startDate:(new Date()-4),
   endDate:...
)
u.save()

请注意,我没有创建任务对象。我已经将值的 Map 直接传递给 addToX... 这强调了添加的对象属于 User 并且应该由 GORM 实例化和保存。

【讨论】:

  • 好吧,你需要发布更多代码,这样人们才能开始将问题放在上下文中,因为这应该可以工作
  • 您是否使用@MockFor 或mockDomain 模拟您的域类?...这就是我所说的上下文,如果您已经将问题本地化,我们不需要控制器代码。在测试中设置代码。
  • 这是一个集成测试。为什么我需要模拟它?
  • 在这种情况下,我没有想法,正在检查。祝你好运
【解决方案2】:

您不能(也不应该)在单元测试中测试条件查询。 grails(和 spock)单元测试不支持 Criteria queires。阅读this question 了解可能的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多