首页 > 解决方案 > 真相忽略场

问题描述

我正在寻找与 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 

谢谢你的帮助。

标签: androidandroid-testingassertjgoogle-truth

解决方案


对于 Truth,我们决定不提供基于反射的 API,因此没有内置的等价物。

我们进行自定义比较的一般方法是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一个要比较的字段。在这种情况下,您可以以稍微简单的方式构造:。)CorrespondenceCorrespondence.transforming(CalendarEntity::name, "name")


推荐阅读