【发布时间】:2016-02-26 10:47:19
【问题描述】:
我有相当复杂的对象结构(带有一堆原始字段和对象引用)并且想要测试除少数字段之外的所有字段。举个例子;
ComplexObject actual = generateMagically("someInput");
ComplexObject expected = ActualFunction.instance.workMagically(actual);
// we want to be sure that workMagically() would create a new ComplexObject
// with some fields are different than "actual" object.
// assertThat(actual, samePropertyValuesAs(expected)); would check all fields.
// what I want is actually; - notice that "fieldName1" and "fieldName2" are
// primitives belong to ComplexObject
assertThat(actual, samePropertyValuesExceptAs(expected, "fieldName1", "fieldName2"))
由于我不想手动检查所有字段,我相信必须有一种方法可以优雅地编写该测试。有什么想法吗?
干杯。
【问题讨论】:
-
那么你有两个bag对象,想要进行深度比较?
-
不确定是否称它们为包对象,有许多原始字段和其他对象引用。我想跳过的字段是属于 ComplexObject 的原始字段。我们可以说这将是一个深入的比较。
-
您是否只想将
samePropertyValuesExceptAs的 Matcher 实现作为此问题的答案?如果是这样,那么您可以创建org.hamcrest.beans.SamePropertyValuesAs<T>的副本,并向其中添加另一个构造函数/静态工厂方法,该方法将删除排除的属性,使其不再被测试。 -
作为注释,你可以试试
assertj:它有一个更流畅的api,IDE完成,你可以写assertThat(actual).isEqualToIgnoringGivenFields(expected, "fieldName1", "fieldName2);:joel-costigliola.github.io/assertj/index.html -
@JérémieB,我建议您将您的评论作为答案,因为这就是我要寻找的问题。谢谢!