2

我有一个对象列表,我想对对象本身做出真理风格的断言,但我没有看到任何合理的方式来表达比相等断言更复杂的东西。我正在设想类似的东西:

assertThat(list).containsElementThat().matches("Foo .* Bar");

假设这在 Truth 中不可用,那么表达这种东西的最真实的方式是什么?如果我知道我在寻找列表中的哪个位置,我可以说:

assertThat(list).hasSize(Math.max(list.size(), i));
assertThat(list.get(i)).matches("Foo .* Bar");

但是(除了有点hacky之外)只有在我i事先知道的情况下才有效,并且不适用于任意迭代。有没有比自己做这个更好的解决方案?

4

1 回答 1

3

你可以com.google.common.truth.Correspondence试一试。

public class MatchesCorrespondence<A> extends Correspondence<A, String> {
     @Override
     public boolean compare(@Nullable A actual, @Nullable String expected) {
         return actual != null && actual.toString().matches(expected);
     }

     // other overrides
}

然后你可以这样断言:

assertThat(list)
  .comparingElementsUsing(new MatchesCorrespondence<>())
  .contains("Foo .* Bar");
于 2016-08-11T18:27:14.437 回答