使用spock数据表来填充对象 [英] Using spock data table for filling objects
问题描述
是的,我知道我可以自己写,但也许有一个开箱即用的解决方案。 / p>
示例
class A {
字符串名称
int age
}
spock表格
id | givenA | ...
1 | [名称:迈克尔] | ...
2 | [名称:托马斯,年龄:45] | ...
- => A.name =Michael,A .age = defined default somewhere
- => A.name =ThomasA.age = 45(因为我覆盖了默认值)
在每个项目中,我创建了我称之为UnitTestUtils的类,并且该类大多包含帮助程序方法,该方法使用默认值创建域对象,允许重写这些值。例如:
Person createTestPerson(Map overrides = [:]){
Person p = new Person(name: Jim Bob,年龄:45)
overrides.each {String key,value - >
if(p.hasProperty(key)){
p.setProperty(key,value)
} else {
println错误:尝试添加不存在的属性
}
}
返回p
}
然后你可以通过创建一个和你已经完成的相同的方法在你的课堂上使用这个方法。
voidmy test(){
given:
Person person
when:
person = UnitTestUtils.createTestPerson(givenA)
then:
person.name == expected.name
person.age == expected.age
其中:
id | givenA |预计
1 | [名称:乔] | [名称:乔,年龄:45]
2 | [年龄:5] | [名称:Jim Bob,年龄:5]
}
在Spock特性中,但它应该很好地为您指定的用例提供。
I am using Spock for the first time. Since we are using a complex domain-model it would be handy to have a mechanism, which allows me to create full objects from data given by spock tables. I do not want to give all values each time, I just want to set the values in defined in datable. So there should be defined default values somewhere.
Yes, I know I could write on my own, but maybe there is an out-of-the-box solution.
Example
class A {
String name
int age
}
spock table
id | givenA | ...
1 | [name: "Michael"] | ...
2 | [name: "Thomas", age: 45 ] | ...
- => A.name = "Michael", A.age = defined default somewhere
- => A.name = "Thomas" A.age = 45 (because I overwrite default value)
In every project I have, I create what I call 'UnitTestUtils' and this class mostly contains helper methods that create domain objects with default values and allow for overrides of those values. For example:
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
}
Then you can make use of this method in your class by creating a map in the same way you've already done.
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]
}
It's not a built in Spock feature, but it should provide nicely for the use case you have specified.
这篇关于使用spock数据表来填充对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!