我有一个类似于以下代码的代码,用于转换协议缓冲区消息的PCollections。因为其中一些很大 我不仅要测试是否相等,还要打印出区别。
我想使用https://google.github.io/truth/fuzzy测试来显示差异。
PCollection<PbMsg1> p1 = ...;
List<PbMsg1> p2 = loadFixture();
PAssert.that(p1).containsInAnyOrder(output.getUserReqList());
问题是:
答案 0 :(得分:0)
我知道现在这可能已经太旧了,但是我发现了解决问题的复杂方法。 我找到了一种编写自定义可序列化函数的方法,该函数可充当满足函数。
对于您的用例,请如下编写PAssert
。
PAssert.that(p1).satisfies(PCollectionSatisfies.forExpectedList(p2));
并将满意度函数实现为
public class PCollectionSatisfies {
public static <T> SerializableFunction<Iterable<T>, Void> forExpectedList(ImmutableList<T> expected) {
return (SerializableFunction<Iterable<T>, Void>)
input -> {
Truth.assertThat(input).containsExactlyElementsIn(expected).inOrder();
return null;
};
}
public static <T> SerializableFunction<T, Void> forSingleton(T expected) {
return (SerializableFunction<T, Void>)
input -> {
Truth.assertThat(input).isEqualTo(expected);
return null;
};
}
}
希望有帮助。