Java Assert无法比较两个数据类,即使它们具有相同的数据

Java Assert无法比较两个数据类,即使它们具有相同的数据,java,android,kotlin,junit,hamcrest,Java,Android,Kotlin,Junit,Hamcrest,我有两个数据类-后翻译和英语翻译。我正在使用第三个数据类——HindiAndEnglishTranslation,在room数据库的一对多关系中对它们进行排序。我试图通过断言给定和检索的印地安语英语翻译对象是否相等来测试房间Dao,但即使两个对象中的数据相同,测试也失败了 后翻译: @Entity(tableName = "hindi_translations") data class HindiTranslation( @PrimaryKey var wor

我有两个数据类-后翻译和英语翻译。我正在使用第三个数据类——HindiAndEnglishTranslation,在room数据库的一对多关系中对它们进行排序。我试图通过断言给定和检索的印地安语英语翻译对象是否相等来测试房间Dao,但即使两个对象中的数据相同,测试也失败了

后翻译:

@Entity(tableName = "hindi_translations")
data class HindiTranslation(
    @PrimaryKey
    var word: String,
    val hindiTranslation: String,
    val id: Long = randomNumberGenerator()
)
@Entity(tableName = "english_translations")
data class EnglishTranslation(
    val translations: List<String>,
    val examples: List<String>,
    val usage: String,
    var parentKey: String,
    @PrimaryKey
    var englishId: Long = randomNumberGenerator(),
)
data class HindiAndEnglishTranslation(
    @Embedded val hindi: HindiTranslation,
    @Relation(
        parentColumn = "word",
        entityColumn = "parentKey"
    )
    val englishTranslations: List<EnglishTranslation>
)
英语翻译:

@Entity(tableName = "hindi_translations")
data class HindiTranslation(
    @PrimaryKey
    var word: String,
    val hindiTranslation: String,
    val id: Long = randomNumberGenerator()
)
@Entity(tableName = "english_translations")
data class EnglishTranslation(
    val translations: List<String>,
    val examples: List<String>,
    val usage: String,
    var parentKey: String,
    @PrimaryKey
    var englishId: Long = randomNumberGenerator(),
)
data class HindiAndEnglishTranslation(
    @Embedded val hindi: HindiTranslation,
    @Relation(
        parentColumn = "word",
        entityColumn = "parentKey"
    )
    val englishTranslations: List<EnglishTranslation>
)
我得到的错误是:

java.lang.AssertionError: 
Expected: <HindiAndEnglishTranslation(hindi=HindiTranslation(word=hot, hindiTranslation=गरम, id=6050220789869782304), englishTranslations=[EnglishTranslation(translations=[having a high degree of heat or a high temperature, (of food) containing or consisting of pungent spices or peppers which produce a burning sensation when tasted, passionately enthusiastic, eager, or excited], examples=[it was hot inside the hall, a very hot dish cooked with green chili, the idea had been nurtured in his hot imagination], usage=Adjective, parentKey=hot, englishId=133595475665305056)])>
     but: was <HindiAndEnglishTranslation(hindi=HindiTranslation(word=hot, hindiTranslation=गरम, id=6050220789869782304), englishTranslations=[EnglishTranslation(translations=[having a high degree of heat or a high temperature, (of food) containing or consisting of pungent spices or peppers which produce a burning sensation when tasted, passionately enthusiastic, eager,  or excited], examples=[it was hot inside the hall, a very hot dish cooked with green chili, the idea had been nurtured in his hot imagination], usage=Adjective, parentKey=hot, englishId=133595475665305056)])>
java.lang.AssertionError:
预期:
但是:是吗

我做错了什么?

您可能希望重写hashcode和equals方法。由于默认的equals方法通过引用而不是数据进行比较。

您应该使用
assertContentEquals(expectedArray,actualArray)
而不是
assertThat(expectedArray,actualArray)
对于数据类不正确我不确定,但我认为数据类中的equals是通过数据进行比较的。尽管如此,我也尝试重写equals和hashcode方法,但没有成功。在哪个库中可以找到assertContentEqual方法?Android Studio无法识别此方法。它在kotlin 1.5中提供