gpt4 book ai didi

java - 使用 spock 数据表填充对象

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:44 24 4
gpt4 key购买 nike

我是第一次使用 Spock。由于我们使用的是复杂的域模型,因此拥有一种机制会很方便,它允许我根据 spock 表提供的数据创建完整的对象。我不想每次都给出所有值,我只想设置数据表中定义的值。所以应该在某处定义默认值。

是的,我知道我可以自己写,但也许有一个开箱即用的解决方案。

例子

class A {
String name
int age
}

spock 表

id | givenA                     | ...
1 | [name: "Michael"] | ...
2 | [name: "Thomas", age: 45 ] | ...
  1. => A.name = "Michael", A.age = 某处定义的默认值
  2. => A.name = "Thomas"A.age = 45(因为我覆盖了默认值)

最佳答案

在我拥有的每个项目中,我都创建了我称之为“UnitTestUtils”的东西,这个类主要包含帮助器方法,这些方法可以创建具有默认值的域对象并允许覆盖这些值。例如:

    Person createTestPerson(Map overrides = [:]){
Person p = new Person(name: "Jim Bob", age: 45)
overrides.each { String key, value ->
if(p.hasProperty(key)){
p.setProperty(key, value)
} else {
println "Error: Trying to add property that doesn't exist"
}
}
return p
}

然后您可以在您的类中使用此方法,方法是按照您已经完成的相同方式创建 map 。

    void "my test"(){
given:
Person person
when:
person = UnitTestUtils.createTestPerson(givenA)
then:
person.name == expected.name
person.age == expected.age
where:
id| givenA | expected
1 | [name: "Joe"] | [name: "Joe", age: 45]
2 | [age: 5] | [name: "Jim Bob", age: 5]
}

它不是内置的 Spock 功能,但它应该可以很好地满足您指定的用例。

关于java - 使用 spock 数据表填充对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com