真值忽略字段

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").)