2015-05-17 151 views
4

我需要通過類級別的測試數據,但TheoryInlineData屬性只能用於方法。在單個測試類中測試接口的多個實現

public class ContainerTests : TestFixture 
{ 
    private IContainer _container; 

    public ContainerTests(string containerName) 
    { 
     _container = CreateContainer(containerName); 
    } 

    [Fact] 
    public void ResolveJobFactory() 
    { 
     IJobFactory jobFactory = _container.Resolve<IJobFactory>(); 
    } 

    private IContainer CreateContainer(string containerName) 
    { 
     if (containerName == "CastleWindsor") 
     { 
      return new WindsorContainerAdapter(); 
     } 
     //other adapters 

     throw new NotImplementedException(); 
    } 
} 

有沒有辦法在xUnit.net中實現類似的東西?

+1

請參閱http://blog.ploeh.dk/2011/05/09/GenericunittestingwithxUnit.net/(並且我確定這是一個dup問題,它不會彈出) –

+0

Thanks @RubenBartelink。只使用繼承解決了這個問題。 –

回答

3

測試在一個測試接口的多種實現 類

不要!每個實現都有一個測試類。

編輯:根據評論,我建議有一個基礎TestClass包含所有常見測試,然後爲每個實現從這個基類繼承的測試類。

+1

謝謝,但這真的不是一個答案。我期待所有實現都有相同的行爲。你能解釋爲什麼這是一個壞主意嗎? –

+0

爲了讓我明白你的問題,你準備測試什麼?你有幾個IJobFactory的實現,你想測試它們都以某種方式表現嗎?還是你有1個IJobFactory的實現,但你只是想測試所有的容器正確地構建它? – Chris

+1

如果它是前者,那麼你可以編寫一個基礎測試類,其中包含所有測試,並針對IJobFactory的實現。然後,您將編寫一個測試類,從每個IJobFactory的實現中繼承此基礎。每個繼承者只需負責構建IJobFactory的實現,然後基類將完成剩下的工作。 – Chris

相關問題