mockito 如何在比较是否相等时忽略lambda?

yhuiod9q  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(147)

给定此类:

data class MyClass(
    val foo: String,
    val bar: () -> Unit
)

我想AssertMyClass的两个示例是相等的,忽略lambda字段bar。我如何在Mockito中实现这一点?
下面是不起作用的代码:

val actual = MyClass("foo", bar = {})
        val expected = MyClass("foo", bar = Mockito.any())

        assertEquals(expected, actual)
lawou6xi

lawou6xi1#

不更改类:

1.您可以通过复制actual字段来创建expected。例如:

val expected = actual.copy(foo = "foo")

1.如果object在其他地方示例化,则可以创建actual字段的副本。例如:

assertEquals(expected, actual.copy(bar = expected.bar)

更改类:

1.构建equals方法时,只考虑主构造函数中的字段。您可以从主构造函数中删除bar字段。例如:

data class MyClass(
    val foo: String
) {
    val bar: () -> Unit = {}
}

1.您可以重写类中的equals方法。例如:

data class MyClass(
    val foo: String,
    val bar: () -> Unit
) {
    override fun equals(other: Any?): Boolean {
        return (other as? MyClass)?.foo == foo
    }

    override fun hashCode(): Int {
        return foo.hashCode()
    }
}

相关问题