亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Mockito 期望我的驗證方法用 `Nothing` 調用?

為什么 Mockito 期望我的驗證方法用 `Nothing` 調用?

慕哥9229398 2023-01-05 10:04:48
在我的項目中,我嘗試設置一個測試,在該測試中應該驗證是否使用特定參數調用了一個方法。為此,我使用 Mockito 和 Kotlin。在測試中,我使用的是模擬課程。( publisher) 此類是 rosjava 的一部分,包含一個方法publish;public interface Publisher<T> extends TopicParticipant { //(java)    void setLatchMode(boolean var1);    boolean getLatchMode();    T newMessage();    void publish(T var1);    boolean hasSubscribers();    int getNumberOfSubscribers();    void shutdown(long var1, TimeUnit var3);    void shutdown();    void addListener(PublisherListener<T> var1);}當我嘗試設定我的期望時:val publisherMock = mock(Publisher::class.java)verify(publisherMock, atLeastOnce()).publish(message) // message is underlined with a red color這不會編譯并表示 for 的參數publish應該屬于 class Nothing!。為什么是這樣?
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

那是因為你的Publisher班級是通用的。mock(Publisher::class.java)使用代碼創建模擬創建Publisher<*>對象(這意味著類型參數是Nothing)。

要解決它,您不能只將類型參數放在模擬創建代碼中——Publisher<String>::class.java這不是 Java 或 Kotlin 的有效代碼。

您所能做的就是不檢查演員表:

val publisherMock = mock(Publisher::class.java) as Publisher<String>

如果您需要從之前的行中禁用Android Studio警告@Suppress("UNCHECKED_CAST")。


查看完整回答
反對 回復 2023-01-05
  • 1 回答
  • 0 關注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號