2012-09-09 33 views
2

我有一個接口IFoo使用Xunit測試多個派生類型的最佳方法是什麼?

public interface IFoo 
{ 
    void DoSomeStuff(); 
} 

而且我有兩個派生類型FooImpl1FooImpl2

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. 
    } 

我怎樣才能重用這個測試類來測試FooImpl1FooImpl2

謝謝

回答

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(); 
    } 
} 
+0

聽起來像一個完美的解決方案,非常感謝你! –

+1

任何想法如何讓這個工作與'xunit 2'和'reshaper-xunit'?對於共享的事實,我得到'抽象fixture的測試不能自行運行'。 – georgiosd

相關問題