java - 测试集合的顺序

标签 java unit-testing junit junit4 hamcrest

给定一个对象列表,我想测试它们是否以正确的顺序返回,但我不想断言整个对象。

例如,我想验证它们的顺序是

id 1, 
id 2,
id 3,

或者在另一种情况下

date mostRecent
date older
date oldest

或者在另一种情况下

enum ValueA
enum ValueB
enum ValueC

基本上我想测试我指定的排序是否正确通过,但实际上只有对象上的一个属性会影响它,所以我想用 hasFirstItem( withPropertyEqualTo ...有 secondItem( withPropertyEqualTo

我知道我会写

 assertEquals( property, list.get(0).id )
 assertEquals( property, list.get(1).id )

但我宁愿做一些让失败更明显的事情,因为它是一个排序问题,也许是声明性的,一次测试整个集合。这可能吗?

最佳答案

你应该能够像这样使用 hamcrest 的匹配器 hasProperty:

public class Foo {

    private String a;

    public Foo(String a) {
        this.a = a;
    }

    public Object getStr() {
        return a;
    }


    public static void main(String[] args) {
        List<Foo> l = Arrays.asList(new Foo("a"), new Foo("b"));
        Assert.assertThat(l, contains(hasProperty("str", equalTo("a")),
                                      hasProperty("str", equalTo("b"))));
    }

}

其中“str”是您要检查的属性的名称。请注意,这仅适用于名为 getXxx 的方法,因为它旨在测试 JavaBeans。

关于java - 测试集合的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602547/

相关文章:

java - 为什么POJO类需要实现Serializable接口(interface)?

java - 如何仅从一个 GUI 进行 JUnit 测试?

java语法问题

java - PowerMockito UnfinishedStubbingException

unit-testing - 找不到头文件

python - 在旧版本的 Python 中使用 `@unittest.skipIf`

javascript - 无法在 useEffect Hook 中测试超时功能

测试 - 如何处理创建新数据的集成测试

java - Junit 跳过对函数的调用进入另一个问题

java - Dijkstra 或 A* 在 10x10 网格上,障碍物是随机的,起点在 0,0,终点在 9,9?