我是第一次使用Spock.由于我们使用的是复杂的域模型,因此可以使用一种机制,这种机制允许我根据spock表给出的数据创建完整的对象.我不想每次都给出所有值,我只想设置datable中定义的值.所以应该在某处定义默认值.
是的,我知道我可以自己写,但也许有一个开箱即用的解决方案.
例
class A {
String name
int age
}
Run Code Online (Sandbox Code Playgroud)
spock表
id | givenA | ...
1 | [name: "Michael"] | ...
2 | [name: "Thomas", age: 45 ] | ...
Run Code Online (Sandbox Code Playgroud)
th3*_*org 12
在我拥有的每个项目中,我创建了我称之为'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
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以与您已经完成相同的方式创建地图,在您的课程中使用此方法.
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]
}
Run Code Online (Sandbox Code Playgroud)
它不是内置的Spock功能,但它应该很好地为您指定的用例提供.
| 归档时间: |
|
| 查看次数: |
7680 次 |
| 最近记录: |