我已经检查了这个.. similar question但我不确定答案...有没有办法为接口编写测试,然后对所有实现测试的类进行测试?
我目前有一个接口只能由一个类实现,但是迟早会发生变化。我现在有对接口的测试,并在一开始所有测试开始:
IFoo foo = GetConcreteFoo()
其中GetConcreteFoo是一样的东西
IFoo GetConcreteFoo()
{
return new ConcreteFooA();
}
然而
,当我拿到美孚的多种实现,莫不是一种使所有测试运行在所有不同具体foos列表上的方法?
我认为,如果没有办法,至少我可以复制/粘贴测试到一个新的文件,具体类的名称,并更改GetConcreteFoo的返回对象...并且更改原始文件从(IFooTests到IConcreteFooATests)。
我不认为这种方法是特别坏..但它不是太优雅/高明,因为这将是在其上运行的所有具体实现相同的测试(文件)。
有没有办法让它做到这一点?
(Im使用MSTests)
谢谢!
+1总体而言,这是一个很好的答案,但做这样的集成测试也可以作为回归测试套件。另一件事是,如果你有一个接口暗示“接口规范之外的语义保证”,那么它就是抽象类而不是接口的主要候选者。 –
是的界面确实意味着语义上的保证,因为它是一个独立于实现的存储库,getAll全部获取,Add添加一个新元素,Update更新一个元素等。该方法应该始终具有相同的可测试结果,独立于实施。 我应该让它成为一个抽象类吗?如果我这样做,我仍然需要测试所有的实现。 虽然谈论参数化测试让我思考PEX,但我也要检查一下。 –