我正在與一個只有靜態函數的API進行交互,但無法打開和更改。包裝API以支持依賴注入
public class WindowsNativeGraphAPI
{
public static IEnumerable<IGraphData> GetGraphData();
public static bool DeleteGraphData(IGraphData data);
}
我希望能夠將API傳遞到一個函數或構造,並遵守依賴注入(以防萬一,我們後來換出API)。
public void GatherGraphData(IGraphAPI api)
{...}
爲了讓這個API作爲參數傳入,我至少需要使用接口傳遞給函數。
public interface IGraphAPI
{
IEnumerable<IGraphData> GetGraphData();
bool DeleteGraphData(IGraphData data);
}
但是,我需要在另一個類中實現接口,因爲我無法更改原始API。這個類將是一個API的輕量級包裝器,它只調用API上的相應函數並返回相同的結果。
public class WindowsGraphAPI : IGraphAPI
{
public IEnumerable<IGraphData> GetGraphData()
{
return WindowsNativeGraphAPI.GetGraphData();
}
public bool DeleteGraphData(IGraphData data)
{
return WindowsNativeGraphAPI.DeleteGraphData(data)
}
}
我不喜歡創建另一個類來包裝API的想法。我明白,這個包裝將是非常輕量級的,只會返回API的結果,但我如何測試包裝?包裝應該可能還包含一些異常處理來處理API中的錯誤。如果我們改用另一個API,那會遇到同樣的問題,我們不得不再次創建這些額外的類和接口。
理想情況下,最終結果將是一個可模擬的API,可以在爲使用它的新組件編寫單元測試時使用。
這是正確的方法嗎?它可以以另一種方式完成嗎?
謝謝
+1 ASP.NET MVC廣泛地實現了這一功能,因此它提供了一組演示此方法的示例。 – 2010-07-16 13:10:15