2

私はインターフェースを持っていますIFoo

public interface IFoo
{
    void DoSomeStuff();
}

そして、私は2つの派生型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か?

4

1 に答える 1

3

IFoo適切な実装を返す抽象メソッドを持つテストの基本クラスを持つことはどうですか?

public abstract class FooTestsBase
{
    protected abstract IFoo GetTestedInstance();

    [Fact]
    public void TestDoSomeStuff()
    {
        var testedInstance = GetTestedInstance();
        // ...
    }
}

これで、すべての派生型がしなければならないことは、その 1 つのインスタンスを提供するだけです。

public class FooImpl1Tests : FooTestsBase
{
    protected override IFoo GetTestedInstance()
    {
        return new FooImpl1();
    }
}
于 2012-09-09T12:26:03.800 に答える