如何在 groovy 测试用例中验证 java 数组列表的每个条目
How to validate each entry of arraylist of java in a groovy test case
我们正在使用 spock 框架(groovy 语言)为我们的 java 代码编写测试用例。
我是 groovy 和 spock 框架的新手。
我正在尝试验证哈希图中包含的值
我有一个 class 这样的:
public class Properties{
protected List<Pair> property;
public List<Pair> getProperty() {
if (property == null) {
property = new ArrayList<Pair>();
}
return this.property;
}
}
public class Pair {
protected String name;
protected String surname;
...getters and setters
}
在spock框架中,测试用例如下:
def "Test case"(){
given:
....
....
when:
...
...
then:
...
def pairs = getProperties().getProperty()
pairs.each {
pair ->
if (pair.getName().equals("Anand")){
pair.getSurname().equals("Zaveri")
println "a"
}
if (pair.getName().equals("Rohit")){
pair.getSurname().equals("Sharma")
}
}
where:
...
}
现在当名字是 Rohit 时,列表包含姓氏是 Kapoor,我正在将它与 Sharma 进行比较,但测试用例仍然通过。
请告诉我我做错了什么。
列表包含很多名字,我想在这个测试用例中检查他们的姓氏。
为每个比较添加断言,例如
assert pair.getSurname().equals("Zaveri")
假设 类 在包 com.example
中,以下工作:
import com.example.*
import spock.lang.*
class PropertiesSpec extends Specification {
def "test case"() {
given:
def properties = new Properties()
when:
properties.property.add(new Pair(name: 'Anand', surname: 'Zaveri'))
then:
1 == properties.property.size()
// this is arguably not really testing new code:
'Zaveri' == properties.property.find { it.name == 'Anand' }.surname
}
}
then:
块中的第一个断言确认列表已创建。第二个断言确认添加了特定的 Pair
,尽管可以说它并不是真正在测试新代码。 (这里"business logic"不多。)
Spock 检查 expect 块下的表达式结果。
val1 == val2 returns true 或 false,测试将成功或失败。
Each 不是 java 循环。它是returns集合中的一个方法。
因此,在您的示例中,Spock 仅检查 pairs.each{} returns 不是假的(groovy 中的空集合也是假的)。
如果您想检查每个列表元素,您可以更改代码以使用循环,或者您可以将集合放入 where
块中,例如:
void 'Test list of properties'() {
expect:
switch (pair.name) {
case 'Anand': pair.surname == 'Zaveri'
break
case 'Rohit': pair.surname == 'Sharma'
break
default: true
}
where:
pair << getProperties().getProperty()
}
我们正在使用 spock 框架(groovy 语言)为我们的 java 代码编写测试用例。
我是 groovy 和 spock 框架的新手。
我正在尝试验证哈希图中包含的值
我有一个 class 这样的:
public class Properties{
protected List<Pair> property;
public List<Pair> getProperty() {
if (property == null) {
property = new ArrayList<Pair>();
}
return this.property;
}
}
public class Pair {
protected String name;
protected String surname;
...getters and setters
}
在spock框架中,测试用例如下:
def "Test case"(){
given:
....
....
when:
...
...
then:
...
def pairs = getProperties().getProperty()
pairs.each {
pair ->
if (pair.getName().equals("Anand")){
pair.getSurname().equals("Zaveri")
println "a"
}
if (pair.getName().equals("Rohit")){
pair.getSurname().equals("Sharma")
}
}
where:
...
}
现在当名字是 Rohit 时,列表包含姓氏是 Kapoor,我正在将它与 Sharma 进行比较,但测试用例仍然通过。
请告诉我我做错了什么。
列表包含很多名字,我想在这个测试用例中检查他们的姓氏。
为每个比较添加断言,例如
assert pair.getSurname().equals("Zaveri")
假设 类 在包 com.example
中,以下工作:
import com.example.*
import spock.lang.*
class PropertiesSpec extends Specification {
def "test case"() {
given:
def properties = new Properties()
when:
properties.property.add(new Pair(name: 'Anand', surname: 'Zaveri'))
then:
1 == properties.property.size()
// this is arguably not really testing new code:
'Zaveri' == properties.property.find { it.name == 'Anand' }.surname
}
}
then:
块中的第一个断言确认列表已创建。第二个断言确认添加了特定的 Pair
,尽管可以说它并不是真正在测试新代码。 (这里"business logic"不多。)
Spock 检查 expect 块下的表达式结果。
val1 == val2 returns true 或 false,测试将成功或失败。
Each 不是 java 循环。它是returns集合中的一个方法。 因此,在您的示例中,Spock 仅检查 pairs.each{} returns 不是假的(groovy 中的空集合也是假的)。
如果您想检查每个列表元素,您可以更改代码以使用循环,或者您可以将集合放入 where
块中,例如:
void 'Test list of properties'() {
expect:
switch (pair.name) {
case 'Anand': pair.surname == 'Zaveri'
break
case 'Rohit': pair.surname == 'Sharma'
break
default: true
}
where:
pair << getProperties().getProperty()
}