我可以实现一系列可重用的测试来测试接口的实现吗?

dlr*_*as2 7 .net unit-testing liskov-substitution-principle visual-studio-2010

我在C#中编写了一系列集合类,每个集合类都实现了类似的自定义接口.是否可以为接口编写单个单元测试集合,并在几个不同的实现上自动运行它们?我想避免每个实现的任何重复的测试代码.

我愿意研究任何框架(NUnit等)或Visual Studio扩展来实现这一目标.


对于那些希望这样做的人,我根据avandeursen公认的解决方案发布了我的具体解决方案作为答案.

ava*_*sen 6

是的,这是可能的.诀窍是让您的单元类测试层次结构遵循代码的类层次结构.

假设您有一个Itf实现类C1和接口的接口C2.

首先为Itf(ItfTest)创建一个测试类.要实际执行测试,您需要创建Itf接口的模拟实现.

此处的所有测试都ItfTest应该传递Itf(!)的任何实现.如果没有,你的实现不符合Liskov替换原则 (马丁的OO设计的SOLID原则中的"L" )

因此,要创建一个测试用例C1,您的C1Test类可以扩展ItfTest.您的扩展应该通过创建C1对象(将其注入或使用GoF工厂方法)替换模拟对象创建.这样,所有ItfTest情况都应用于类型的实例C1.此外,您的C1Test类可以包含特定于的其他测试用例C1.

同样地C2.您可以重复使用更深层次的嵌套类和接口.

参考文献:Binder的多态服务器测试模式,以及McGregor的PACT - 组件测试的并行架构.