在我的項目中,我嘗試設置一個測試,在該測試中應該驗證是否使用特定參數調用了一個方法。為此,我使用 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")
。
添加回答
舉報
0/150
提交
取消