当前位置: 首页 > 知识库问答 >
问题:

是否有一种方法使equals(==)检查kotlin.js.Date对象工作?

李泓
2023-03-14

我想就我们在Kotlin多平台项目中尝试单元测试特定于平台的Date类时面临的问题寻求一些帮助/建议。

我们的Kotlin多平台库目标;JVM,本机

  • java.util.日期(JVM)
  • 平台. Foundation. NSDate(本地)
  • kotlin.js.日期(JS)

通过预期的/实际的日期类公开,并在公共包的公共域类中使用。例如:

public data class Event {
    val id: String,
    val start: Date
}

长话短说;当进行单元测试时,我们发现assertEquals适用于JVM

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中缺少equals()操作符,JS的assertEquals失败。js。约会课。

根据我们的用例,关于如何使assertEquals在所有平台上工作,有什么建议吗?我可以想象一个解决方法是引入一个DateWrapper类来包装Date类,并手动实现equals()。。。但这需要使用重构我们的公共API,而且不确定这是否是最好的方法。所以任何帮助/建议都是非常受欢迎的。非常感谢!

共有1个答案

储阳曦
2023-03-14

assertEquals将无法工作,因为您无法将equals方法添加到kotlin.js.Date类-它是公开Date API的外部函数,所有比较都将以与JS相同的方式进行

看看这篇文章:

  • 用JavaScript比较两个日期

要使它工作,您应该使用getTime()或在编写时提供包装类,或在测试类或其他util文件中创建重载的assertEquals方法

fun assertEquals(d1: Date, d2: Date) {
    kotlin.test.assertEquals(d1.getTime(), d2.getTime())
}

不过,你还是需要注意进口

 类似资料:
  • 问题内容: 在Go中,如何检查对象是否响应方法? 例如,在Objective-C中,可以通过执行以下操作来实现: 问题答案: 一个简单的选择是仅使用您要检查的方法声明一个接口,然后针对您的类型进行类型断言;例如: 如果您打算对自己的类型进行任何疯狂的操作,则可能要使用该软件包。http://golang.org/pkg/reflect

  • 我想检查一个对象是否有新的子对象。我的意思是我有一个带有x嵌套对象的对象,但是如果主对象有新对象,我会检查它。有什么现有的解决方案来检查这个问题吗? 我的目标是如果对象有新项目,则调用函数。每次数组更改时,此代码都会调用该函数。也当一些项目被删除。这部分功能是错误的。有办法修好它吗?

  • 问题内容: 有没有一种快速的方法来检查对象是jQuery对象还是本机JavaScript对象? 例: 显然,上面的代码有效,但并不安全。您可能会向对象添加选择器键并获得相同的结果。有没有更好的方法来确保该对象实际上是jQuery对象? 符合 问题答案: 您可以使用运算符: 说明 :该函数(又名)被实现为构造函数。构造函数将以前缀调用。 调用时,内部jQuery将此转换为1。JavaScript继续

  • 让我们考虑下面示例中的一个场景,其中我想检查对象的值或,但它在尝试访问第二级对象()时抛出异常'无法读取未定义的属性b。 最终,我想访问,如何使用lodash检查值是否为“未定义”或“null”?是否有方法检查一系列值中的对象?

  • 问题内容: 假设类型 A的 对象存储在DB中。这是我使用hibernate从数据库加载特定数据库的方式: 如果id = 1的对象不存在,我将得到 ObjectNotFoundException 。但是,有没有一种方法可以检查此类对象是否存在而不必捕获异常?我想拥有的是: 找不到hibernate文档… 问题答案: 您可以使用: 如果对象在数据库中不存在,它将返回null。您可以在Hibernate

  • 本文向大家介绍如何检查一个对象是否为空,包括了如何检查一个对象是否为空的使用技巧和注意事项,需要的朋友参考一下 检查一个数组为空很容易,直接调用 length 方法即可,那么如何检查一个对象是否为空呢 ❓ 这里的空指的是对象没有自有属性 假设这里有两个对象,一个是 obj 一个是 anotherObj 想了半天查看对象是否有 Symbol 属性只能使用 getOwnPropertySymbols