我有一个界面IFoo
public interface IFoo
{
void DoSomeStuff();
}
我有两种派生类型FooImpl1
和FooImpl2
:
public class FooImpl1 : IFoo
{
public void DoSomeStuff()
{
//...
}
}
public class FooImpl2 : IFoo
{
public void DoSomeStuff()
{
//Should do EXACTLY the same job as FooImpl1.DoSomeStuff()
}
}
我有一个测试类,它测试IFoo
FooImpl1
合同 private static IFoo FooFactory()
{
return new FooImpl1();
}
[Fact]
public void TestDoSomeStuff()
{
IFoo foo = FooFactory();
//Assertions.
}
:
FooImpl1
如何重复使用此测试类来测试FooImpl2
和{{1}}?
谢谢
答案 0 :(得分:2)
如何使用抽象方法返回适当的实现来为IFoo
测试创建基类?
public abstract class FooTestsBase
{
protected abstract IFoo GetTestedInstance();
[Fact]
public void TestDoSomeStuff()
{
var testedInstance = GetTestedInstance();
// ...
}
}
现在,所有派生类型必须做的只是提供一个实例:
public class FooImpl1Tests : FooTestsBase
{
protected override IFoo GetTestedInstance()
{
return new FooImpl1();
}
}