我正在使用第三方库类Foo,它有几个公共方法和属性,我的类使用这些方法和属性作为依赖项。
我想测试我的类并模拟Foo对象,但是它没有接口。所以我在想,我可以在我自己的类中继承这个类,提取一个接口,然后瞧!我会有一个可注射的接口。
...but当然也有并发症。Foo有许多公共字段。这些不能进入接口,所以我必须为字段编写属性包装器。这很烦人。
有自动化的方法吗?我有ReSharper,但似乎没有自动实现这一功能的方法,这意味着我正在编写大量乏味的代码。
发布于 2015-07-28 15:53:19
我将创建一个包装类,它使用并使用您设计的接口,它只公开您需要从Foo获取的内容。
例如:
class MyFooWrapper : IFoo
{
private Foo _foo;
// methods exposed by IFoo
}通过使MyFooWrapper成为一个包含属性和任何其他基本功能的抽象类,您可以更进一步,但是不要将Foo放在其中,而是有一个继承foo包装器的类。
发布于 2015-07-28 16:08:49
您应该将被测试的类分成两个单独的类。一个类包含您需要测试的(业务)逻辑,另一个类充当外部依赖项的适配器。这个适配器类应该实现一个接口,逻辑类应该依赖于该接口。这个接口不应该模仿外部依赖项的API,但是应该根据应用程序的需要定义接口。通过这样做,您可以实现以下目标:
最后,您将得到一个与外部库紧密耦合的适配器类。此适配器将将传入呼叫转换为可以发送到外部库的东西。这个适配器不能单独进行测试,如果测试很重要,您可能需要对其进行集成测试(取决于外部库的功能)。重要的是,您不必测试外部库是否工作,但您可能仍然希望测试适配器类的正确性。
https://stackoverflow.com/questions/31681275
复制相似问题