2017-03-02 146 views
2

是否可以在實函數調用中使用模擬函數?兩個函數都在同一個對象中。因此,舉例來說,如果我有在實函數調用中使用模擬函數返回值

obj A { 
    def mockThis(value: Int): Int = { 
    value*5 
    } 

    def realFuncIWantToTest(value: Int): Int = { 
    val v = mockThis(value) 
    v 
    } 
} 

顯然,這是一個非常簡單的例子,這是不是我的代碼做(V實際上是一個複雜的對象)。基本上我想讓realFuncIWantToTest使用我定義的模擬函數返回值。

謝謝!

回答

2

可能能夠使用Mockito的間諜做到這一點;有關這方面的示例,請參見here

間諜基本上是由根據測試你的周圍類的真正對象間諜包裝工作。

但這裏有一個詞:即使有可能,請考慮更改您的設計。這種「部分嘲諷」往往表明您的班級違反了單一責任原則。含義:一個班級應該負責「一件事」。但是,您可以/必須部分模擬您的類中的東西的想法表明您的類負責至少兩個,不管怎樣斷開方面。

在這種感:更好的做法是將mockThis()將是對另一個對象的調用;可以通過依賴注入插入此類。從技術的角度來看,至少在Java級別上,你的想法應該可以正常工作(在我對Mockito會很好地與你的對象配合工作的情況下)但從概念上來看,你應該避免這樣做。

+0

是的,最後我決定改變設計並重構我的代碼。你的建議是讓'mockThis()'成爲另一個對象的調用,我插入了一個依賴注入,正是我所做的。花了一些時間,但最終它使它變得更清潔和可讀。謝謝您的幫助! – learningboy

+0

非常歡迎您,我很高興您發現我的建議有幫助! – GhostCat

相關問題