[英]Automated way to write a wrapper and interface for dependency injection of third party libraries?
我正在使用第三方庫類Foo
,該類具有一些公共方法和屬性,我的類將它們用作依賴項。
我想測試我的類並模擬Foo
對象,但是它沒有接口。 所以我在想,我可以在自己的類中繼承該類,提取一個接口,瞧! 我將有一個可注射的接口。
...但是當然會有並發症。 Foo
有很多公共場所。 這些不能進入接口,因此我必須為字段編寫屬性包裝器。 它很煩人。
有自動化的方法嗎? 我有ReSharper,但似乎沒有一種方法可以自動完成此操作,這意味着我正在編寫許多繁瑣的代碼。
您應該將測試中的班級分為兩個單獨的班級。 一類包含您需要測試的(業務)邏輯,另一類充當外部依賴項的適配器。 該適配器類應實現一個接口,而邏輯類應依賴於該接口。 此接口不應該模仿外部依賴的API,但接口必須在應用程序的需求來定義。 通過這樣做,您可以實現:
您最終將得到一個與外部庫緊密耦合的適配器類。 該適配器會將傳入的呼叫轉換為可以發送到外部庫的內容。 該適配器不能單獨進行測試,如果測試很重要,則可能需要對此進行集成測試(取決於外部庫的工作方式)。 要說的重要一點是,您不必測試外部庫是否有效,但是您可能仍想測試適配器類的正確性。
我將創建一個包裝器類,該包裝器類使用您設計的接口,只暴露Foo所需的內容。
因此,例如:
class MyFooWrapper : IFoo
{
private Foo _foo;
// methods exposed by IFoo
}
您可以通過使MyFooWrapper成為一個抽象類來包含屬性和任何其他基本功能的抽象類,但不要在那里放Foo,而是有一個繼承foo包裝器的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.