【发布时间】:2021-08-31 19:26:55
【问题描述】:
我想就我们在 Kotlin 多平台项目中尝试对特定于平台的 Date 类进行单元测试时遇到的问题寻求一些帮助/建议。
我们的 Kotlin 多平台库目标; JVM、Native 和 JavaScript 并使用平台特定的 Date 类:
- java.util.Date (JVM)
- platform.Foundation.NSDate(本机)
- kotlin.js.Date (JS)
通过预期/实际 Date 类公开,并在公共包中的公共域类中使用。例如:
public data class Event {
val id: String,
val start: Date
}
长话短说;在进行单元测试时,我们发现 assertEquals 适用于 JVM 和 Native,但不适用于 JavaScript。例如:
import kotlin.js.Date
import kotlin.test.Test
import kotlin.test.assertEquals
class DateEqualsTest {
@Test
// Fails!
fun dateEquals() {
val first = Date(1_630_399_506_000)
val second = Date(1_630_399_506_000)
assertEquals(first, second)
}
@Test
// Succeeds
fun timestampEquals() {
val first = Date(1_630_399_506_000)
val second = Date(1_630_399_506_000)
assertEquals(first.getTime(), second.getTime())
}
}
由于(我猜)kotlin.js.Date 类中缺少 equals() 运算符,JS 的 assertEquals 失败。
对于如何使assertEquals 在我们的用例的所有平台上工作有什么建议吗?我可以想象一种解决方法可能是引入一个包装Date 类的DateWrapper 类并手动实现equals() ......但这需要使用重构我们的公共API,并且不确定这是否是最好的方法去。所以任何帮助/建议都非常受欢迎。非常感谢!
【问题讨论】:
标签: unit-testing kotlin assertion kotlin-multiplatform kotlin-js