真值忽略字段
Truth ignore field
我正在寻找相当于 AssertJ 的 Guava Truth usingElementComparatorIgnoringFields 来忽略某些字段。
示例:
data class CalendarEntity(
@PrimaryKey(autoGenerate = true)
var id: Int = 0,
var name: String
)
Truth.assertThat(currentCalendars).containsExactlyElementsIn(expectedCalendars) // Here I want to ignore the id field
感谢您的帮助。
事实上,我们决定不提供 reflection-based API,因此没有 built-in 等效项。
我们进行自定义比较的一般方法是 Fuzzy Truth。在你的情况下,它看起来像这样(Java,未经测试):
Correspondence<CalendarEntity, CalendarEntity> ignoreId =
Correspondence.from(
(a, b) -> a.name.equals(b.name),
"fields other than ID");
assertThat(currentCalendars).usingCorrespondence(ignoreId).containsExactlyElementsIn(expectedCalendars);
如果您预计非常需要这个(并且您希望坚持使用 Truth 而不是 AssertJ),那么您可以将 ignoreId
代码概括为使用任意字段名称。
(另外:在这个具体的例子中,你的CalendarEntity
只有一个你想要比较的字段。在这种情况下,你可以构造Correspondence
稍微简单一点:Correspondence.transforming(CalendarEntity::name, "name")
.)
我正在寻找相当于 AssertJ 的 Guava Truth usingElementComparatorIgnoringFields 来忽略某些字段。
示例:
data class CalendarEntity(
@PrimaryKey(autoGenerate = true)
var id: Int = 0,
var name: String
)
Truth.assertThat(currentCalendars).containsExactlyElementsIn(expectedCalendars) // Here I want to ignore the id field
感谢您的帮助。
事实上,我们决定不提供 reflection-based API,因此没有 built-in 等效项。
我们进行自定义比较的一般方法是 Fuzzy Truth。在你的情况下,它看起来像这样(Java,未经测试):
Correspondence<CalendarEntity, CalendarEntity> ignoreId =
Correspondence.from(
(a, b) -> a.name.equals(b.name),
"fields other than ID");
assertThat(currentCalendars).usingCorrespondence(ignoreId).containsExactlyElementsIn(expectedCalendars);
如果您预计非常需要这个(并且您希望坚持使用 Truth 而不是 AssertJ),那么您可以将 ignoreId
代码概括为使用任意字段名称。
(另外:在这个具体的例子中,你的CalendarEntity
只有一个你想要比较的字段。在这种情况下,你可以构造Correspondence
稍微简单一点:Correspondence.transforming(CalendarEntity::name, "name")
.)