我以前见过针对接口测试问题的很好的解决方案,您可以为接口创建一个抽象测试类,然后为每个从该接口派生的类的测试继承该测试类,使用{{ 1}}方法来提供给定类的实例。例如
CreateInstance
但是,虽然上述方法在我们的类仅实现一个接口时效果很好,但是当继承多个接口时,事情会变得更加复杂。我们可以通过让每个接口的每个抽象测试类都继承多个测试类来解决此问题。但是该解决方案仅适用于一个继承级别。即,如果我们在继承层次结构中还有另一个子类,则需要重复自己/不能从为基类编写的测试中受益。
为了演示,如果我们在上述问题的末尾添加代码,我们将进行测试:
public interface INamable {string Name{get;}}
[TestClass]
public abstract class INamableTests
{
protected abstract INamable CreateInstance(string name);
[TestMethod]
public void NameCorrectlyAssignedTest()
{
var expected = "this is my name";
var instance = CreateInstance(expected);
Assert.AreEqual(expected, instance.Name);
}
}
但是由于我们不能从多个类继承,因此我们的测试继承仅限于:
INamable \
IStartable |- IBatchJob - BatchJob - AutoStopBatchJob
IStoppable /
因此,要为INamableTests - IBatchJobTests - BatchJobTests - AutoStopBatchJobTests
和IStartableTests
(以及使用IStoppableTests
接口的任何其他类)运行BatchJob
和AutoStopBatchJob
(我们需要重复以下代码)打电话给那些测试。
有更好的方法吗?
IBatchJob