加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

单元测试 – 为什么将空字符串转换为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.

我希望有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读