0

因为我需要在 Kotlin 中使用 Mockk 测试传递的发布函数参数是否正确

下面是代码:

   val notificationData = NotificationData(
                notificationId = "test-notificationID",
                operation = "CREATE",
                partnerName = "test-partner",
                created = Instant.now().toEpochMilli().toString(),
                services = []
            )
    verify(exactly = 1) { publish(notificationData) }

但是由于notificationData对象中的created属性将在模拟以及被调用函数中具有实时值,因此两者都不匹配并给出以下错误

验证失败:调用 1 of 1:publish(eq(NotificationData(notificationId=test-notificationId, partnerName=test-partner, operation=CREATE, mutatedAttributes=null, services=[], created=1633719398360))))。只发生了一次对 Notification(object Notification)/publish(NotificationData) 的匹配调用,但参数不匹配:[0]:参数:NotificationData(notificationId=test-notificationId, partnerName=test-partner, operation=CREATE, mutatedAttributes=null , services=[], created=1633719398404), matcher: eq(NotificationData(notificationId=test-notificationId, partnerName=test-partner, operation=CREATE, mutatedAttributes=null, services=[], created=1633719398360)), 结果: -

任何人都请帮我找出来,我怎样才能忽略“created”属性来获得测试成功

4

1 回答 1

0

正如您打算测试的那样,您似乎也可以模拟created。因此,而不是使用Instant.now().toEpochMilli().toString(),您应该为那些设置一个时间 milis 值created,例如

val notificationData = NotificationData(
                notificationId = "test-notificationID",
                operation = "CREATE",
                partnerName = "test-partner",
                created = "1633719398404",
                services = []
            )

编辑

似乎有另一种方法可能会有所帮助,但相当费力,通过NotificationData在您的原始课程中注入。所以,你可以NotificationData在你的测试中模拟

于 2021-10-09T00:16:48.560 回答