2014-09-25 52 views
3

我是新來的xUnit和AutoFixture,並設置一個收集數據的屬性寫一個理論是這樣的:使用AutoFixture到一個理論的xUnit

[Theory, AutoData] 
public void Some_Unit_Test(List<MyClass> data) 
{ 
    // Test stuff 
} 

MyClass的樣子:

public class MyClass 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
} 

這會導致AutoFixture爲每個屬性創建具有隨機值的項目列表。這很好,但我希望IsActive屬性始終爲真。

我可以在每次測試開始時將它設置爲true,但我猜測有一個更明智的方法。我看着InlineDataClassData, PropertyData,甚至Inject(),但沒有什麼似乎適合。

我該如何改進?

回答

4

下面是做到這一點的一種方法:

public class Test 
{ 
    [Theory, TestConventions] 
    public void ATestMethod(List<MyClass> data) 
    { 
     Assert.True(data.All(x => x.IsActive)); 
    } 
} 

TestConventionsAttribute被定義爲:

internal class TestConventionsAttribute : AutoDataAttribute 
{ 
    internal TestConventionsAttribute() 
     : base(new Fixture().Customize(new TestConventions())) 
    { 
    } 

    private class TestConventions : ICustomization 
    { 
     public void Customize(IFixture fixture) 
     { 
      fixture.Customize<MyClass>(c => c.With(x => x.IsActive, true)); 
     } 
    } 
} 
相關問題