簡體   English   中英

使第三方庫實現接口的策略?

[英]Strategy to make a third-party library implement interfaces?

我想為我的一些課程編寫單元測試。 我的一些類依賴於使用文件系統並且沒有模擬接口的第三方庫。

我要模擬該類以避免它依賴於文件系統,因為我的代碼實際上只關心該代碼的結果。

在不修改初始庫的情況下,用於模擬庫的具體類的最佳策略是什么?

我想我可能會創建一個實現接口並包含初始庫對象的包裝器對象。 但是,我想確保在開始這條道路之前可能沒有更好的方法。

或者,在這種情況下,像TypeMock這樣的工具是否比Moq更適合?

背景:

除非它像.NET框架一樣是一個穩定的庫/框架,否則我更願意將代碼與它分離。 也就是說,我喜歡讓庫依賴於我的系統,而不是相反。

編輯,重新刪除:您可能會認為您使用的庫“穩定”。 但是,由於它與“外部”系統(文件系統)交互,我可能仍然希望將我的系統與其分離。

為此,我為庫創建了一個適配器/包裝器。 該接口具有我的系統希望庫具有的方法,而不是庫碰巧提供的方法。 該接口使用我的系統擁有的類型,而不是庫中的任何類型。 適配器使任何轉換成為必要。

我這樣做是否要模擬/存根/偽造庫,因為它提供了良好的關注點分離,並且它還保護我的系統免受庫中的更改。

回答你的問題:

一旦適配器/包裝器在那里,很容易在測試中偽造它。 作為獎勵,由於適配器使用您的系統語言,因此編寫易於閱讀和理解的測試會更容易。

無論你是使用模擬框架還是為adapeter編寫自己的假貨都是一種品味問題。

暫無
暫無

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

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