我正在寻找一个Java库,该库允许匹配一系列对象,并可能与诸如hamcrest的匹配器混合。

理想情况下,我想编写一个测试来检查可迭代对象是否包含看起来像正则表达式的序列,但要针对对象而不是字符串:

assertThat(myList).inSequence(oneOrMore(any()),zeroOrMore(equals(MyObject)));

具有验证的Mockito与我想要的接近,但是缺少一些简单的匹配器(例如zeroOrMore)

亚历山大(Alexandre)

最佳答案

我能想到的最简单的解决方案是为每个对象构建一个带有字母的字符串,然后照常使用regex。

public boolean matchObjects() {
    Object a = new Object();
    Object b = new Object();
    Object c = new Object();
    Object d = new Object();
    ArrayList<Object> arrayList = new ArrayList<Object>();
    arrayList.add(a);
    arrayList.add(b);
    arrayList.add(c);
    arrayList.add(b);
    arrayList.add(d);
    Iterable<Object> iterable = arrayList;
    String result = "";
    for (Object object : iterable) {
        if (object.equals(a))
            result += "a";
        else if (object.equals(b))
            result += "b";
        else if (object.equals(c))
            result += "c";
        else if (object.equals(d))
            result += "d";
        else
            result += "x";
    }
    Pattern pattern = Pattern.compile("a.*b");
    return pattern.matcher(result).find();
}

10-07 19:11
查看更多