2017-09-30 17 views
-1

我試圖測試中使用的Android中的Mockito改造科特林的API客戶端類,它看起來像這樣:使用Mockito,我如何用val接口字段聲明監聽Kotlin類?

class SomeApiClient : SomeApi { 

    private val service: SomeApiService 

    constructor(service: SomeApiService) { 
    this.service = service 
    } 
} 

它實現SomeApi接口,幷包含一個改裝服務接口作爲構造函數的參數。

spy ING類與的Mockito,類需要具有無參數的構造函數,否則你的測試將失敗,MockitoException

org.mockito.exceptions.base.MockitoException:無法初始化@Spy註釋字段'SomeClass'。 請確保類型'SomeClass'具有無參數構造函數。

如果類具有包含默認值的所有參數的構造函數,那麼Kotlin爲其生成無參數構造函數。但是,如果類接收到interface作爲構造函數參數(並且具有與val聲明相對應的字段),那麼如何應用默認值或聲明空構造函數呢?

謝謝!

回答

2

當間諜的Mockito類,這些類需要具有無參數的構造函數

不,這只是如果你不自己提供實例。因此,提供實例,例如

@Spy val client = SomeApiClient(Mockito.mock(SomeApiService::class.java))