簡體   English   中英

如何模擬對象構造函數中使用的函數(使用Mockito)?

[英]How to mock a function used in the object constructor (with Mockito)?

我需要使用Java為Android應用程序編寫單元測試。 我目前需要做的是創建一個對象Picture並將其用於某些測試。 這個對象的問題是,它的構造函數有一個方法調用:

public Picture(File imageFile) {
    this.filename = imageFile.getName();
    this.imageDimension = getImageDimension();
    /.../
}

方法getImageDimension()引用了其他一些類,因此,我希望出於可分離性而僅模擬其結果。 對於模擬,我需要給Mockito一個構造函數,所以在我看來像是個雞雞蛋問題。

因此,是否有機會通過Mockito模擬對象構造函數中使用的函數? 如果沒有,如何在不更改原始代碼的情況下解決這種情況?

通常,您會模擬整個對象,而不僅僅是對象的一部分。 但是,如果不是最終的,則創建Picture的子類並覆蓋構造函數,然后在此處進行自定義操作。 這樣,您可以避免調用原始構造函數,並且可以測試實例。

如果這是最終的,那么單元測試將變得非常困難。 如果您實際上不是對該特定類進行單元測試,則應完全模擬圖片對象或完全不模擬圖片對象。

順便說一句,這就是為什么您不應該讓您的構造函數進行工作的原因:它導致難以測試和模擬的代碼。 將對象初始化與邏輯分開是一件好事。 可能您想要的是一個附加的構造函數,該構造函數將文件名和尺寸作為構造函數args。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM