2014-09-25 4 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 в начале каждого теста, но я предполагаю, что есть более умный способ. Я посмотрел на InlineData, ClassData, 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)); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^