断言列表恰好包含一个满足条件的元素

时间:2018-03-15 14:31:08

标签: java junit java-8 junit4 assertj

在我的JUnit测试中,我想声明一个列表只包含一个满足给定条件的元素(列表中可以有许多元素,但只有一个元素应满足条件)。我写了下面的代码,但我想知道是否有可能摆脱“新条件<>” - 部分并使用“纯”lambda?还是有其他更优雅的方式来完成我想做的事情?

class Foo {
  String u;

  Foo(String u) { this.u = u; }

  String getIt() { return u; }
}

@Test
public void testIt() {
  List<Foo> list = Lists.newArrayList(new Foo("abc"), new Foo("xyz"));

  assertThat(list)
        .haveExactly(1, new Condition<>(
                x -> "xyz".equals(x.getIt()),
                "Fail"));
}

1 个答案:

答案 0 :(得分:4)

这应该有效(但我还没有测试过):

assertThat(list).extracting(Foo::getIt)
                .containsOnlyOnce("xyz");