我正在与一个只有静态函数的 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,可以在为使用它的新组件编写单元测试时使用。
这是执行此操作的正确方法吗?可以用其他方式完成吗?
Thanks