单元测试 – 为什么将空字符串转换为null传递给Grails 2.4.0中的
发布时间:2020-12-14 16:24:51 所属栏目:大数据 来源:网络整理
导读:我是Groovy和Grails的新手.由于空字符串被转换为null,因此要测试持久化的域对象的Spock测试失败.这是代码. 域对象, class Todo { String name Date createdDate String priority String status static constraints = { priority blank: true }} Spock规范, @
我是Groovy和Grails的新手.由于空字符串被转换为null,因此要测试持久化的域对象的Spock测试失败.这是代码.
域对象, class Todo { String name Date createdDate String priority String status static constraints = { priority blank: true } } Spock规范, @TestFor(Todo) class TodoSpec extends Specification { void "test persist"() { when: new Todo(name: 't1',createdDate: new Date(),priority: "1",status: 'ok').save() new Todo(name: 't2',priority: '',status: 'ok').save() then: Todo.list().size() == 2 } } grails test-app的结果是 Todo.list().size() == 2 | | | | 1 false [collab.todo.Todo : 1] at collab.todo.TodoSpec.test persist(TodoSpec.groovy:18) 我发现新Todo(名称:’t2′,createdDate:new Date(),priority:”,status:’ok’)中的空字符串”通过调试转换为null.谷歌一段时间后,我发现Grails中有一个功能将空字符串从Web表单转换为null以保持不变,这可以通过Config.groovy中的配置grails.databinding.convertEmptyStringsToNull = false禁用.但我不认为这是Spock UT的情况.我已经尝试过,但它没有按照我的想法运作. 我想知道为什么空字符串转换为null作为传递给构造函数的参数?提前致谢. 解决方法
它现在有点小,但可以很容易地工作.以下测试通过Grails 2.3.9 …
域类: // grails-app/domain/com/demo/Person.groovy package com.demo class Person { String title } Config.groovy中: // grails-app/conf/Config.groovy grails.databinding.convertEmptyStringsToNull = false // ... 单元测试: // test/unit/com/demo/PersonSpec.groovy package com.demo import grails.test.mixin.TestFor import spock.lang.Specification @TestFor(Person) @TestMixin(grails.test.mixin.web.ControllerUnitTestMixin) class PersonSpec extends Specification { void "test empty string conversion"() { when: def p = new Person(title: '') then: p.title == '' } } 关键是将ContollerUnitTestMixin应用于测试用例,即使它没有真正测试控制器.见https://jira.grails.org/browse/GRAILS-11136. 我希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |