我想嘲笑使用Mockito的Kotlin的通用接口。但到目前爲止,我沒有找到自然的解決辦法。鑑於:嘲笑Kotlin和Mockito的通用接口
interface X<T> {
fun x(): T
}
fun f(x: X<Int>) = x.x()
我可以嘲笑X
任何如下:
val x = f(Mockito.mock(X::class.java) as X<Int>)
但是,這將產生一個 「未投」 的警告。
@Mock lateinit var x: X<Int>
但我不希望因爲我喜歡我的領域最終使用
@Mock
註解。介紹一個輔助功能,爲mockito-kotlin library做:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)!!
然後調用它像這樣:
val x: X<Int> = mock()
但我不希望使用的輔助函數。
是否有一個優雅的純Kotlin方式來模擬Mockito的通用接口? (我寧願1的版本沒有警告。)
爲什麼你不想使用幫助函數? 'val x = f(模擬>())'有什麼問題? –
mfulton26
因爲它感覺就像是一個解決方法,用於「未經檢查的轉換」問題。有沒有辦法解決這個問題? – jhunovis
我沒有看到[reified type parameters](https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters)作爲解決「未檢查轉換」問題的解決方法。實際上,我將「未經檢查的轉換」問題看作是(Java)解決方法,不具有通用類型參數(或類似的東西)。 – mfulton26