簡體   English   中英

如何使用 Mockk 的驗證方法忽略對 function 中傳遞的參數中的一個屬性的測試

[英]How to ignore testing of one of the attribute in an argument passed in function using verify method of Mockk

因為我需要在 Kotlin 中使用 Mockk 測試發布 function 傳遞的參數是否正確

下面是代碼:

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

但是由於在 notificationData object 中創建的屬性將在模擬和調用 function 中具有實時值,兩者都不匹配並給出以下錯誤

驗證失敗:調用 1 of 1:publish(eq(NotificationData(notificationId=test-notificationId, partnerName=test-partner, operation=CREATE, mutatedAttributes=null, services=[], created=1633719398360))))。 只發生一次對 Notification(object Notification)/publish(NotificationData) 的匹配調用,但 arguments 不匹配:[0]: argument: 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的對象。 因此,而不是使用Instant.now().toEpochMilli().toString() ,你應該給那些created的時間 milis 值,例如

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

編輯

似乎還有另一種方法可能會有所幫助,但需要付出很多努力,方法是在原始 class 中注入NotificationData 。因此,您可以在測試中模擬NotificationData

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM