2013-05-30 11 views
5

Biorąc pod uwagę następujący test:AutoFixture: PropertyData i parametry heterogeniczne

[Theory] 
[PropertyData("GetValidInputForDb")] 
public void GivenValidInputShouldOutputCorrectResult(
    string patientId 
    , string patientFirstName 
) 
{ 
    var fixture = new Fixture();   

    var sut = fixture.Create<HtmlOutputBuilder>(); 

    sut.DoSomething(); 
    // More code 
} 

chcę otaczać tworzenie opraw w swojej klasie, coś podobnego do:

[Theory] 
[CustomPropertyData("GetValidInputForDb")] 
public void GivenValidInputShouldOutputCorrectResult(
    string patientId 
    , string patientFirstName 
    , HtmlOutputBuilder sut 
) 
{ 
    sut.DoSomething(); 
    // More code 
} 

Problemem jest to, że jestem przy użyciu PropertyData, a druga z nich dostarcza dwa parametry wejściowe. Fakt, że próbuję automatycznie utworzyć moje urządzenie jako parametr powoduje wyjątek.

Oto CustomPropertyData:

public class CustomPropertyDataAttribute : CompositeDataAttribute 
{ 
    public CustomPropertyDataAttribute(string validInput) 
     :base(new DataAttribute[] 
      { 
       new PropertyDataAttribute(validInput), 
       new AutoDataAttribute(new Fixture() 
        .Customize(new HtmlOutpuBuilderTestConvention())), 
      }) 
    { 

    } 
} 

Jakie są możliwości, aby rozwiązać ten problem?

+0

Jak wygląda "CustomPropertyData"? –

+0

@NikosBaxevanis Zaktualizowałem OP. Próbowałem napisać mój kod zgodnie z http://nikosbaxevanis.com/2012/07/27/composite-xunit-net-data-attributes/. – DavidS

Odpowiedz

3

Trzeba podać dane do PropertyDataAttribute jak poniżej:

public static IEnumerable<object[]> GetValidInputForDb 
{ 
    get 
    { 
     yield return new object[] 
     { 
      "123", 
      "abc" 
     }; 
    } 
} 

Wartość patientId będzie wartość patientFirstName będzie abc a wartość SUT będzie dostarczany automatycznie przez AutoFixture.

Model CustomPropertyDataAttribute wygląda dobrze.

+0

Ok, pozwól mi wrócić do deski kreślarskiej, ponieważ prawie zrobiłem to, co zasugerowałeś. Dostałem jednak wyjątek. Spróbuję go jeszcze raz i spróbuję go w razie potrzeby poprawić. Dzięki za pomoc. – DavidS

+0

Wygląda na to, że coś jest nie tak z 'HtmlOutpuBuilderTestConvention' lub może pytanie skierowane na fora' PropertyDataAttribute' na forum xUnit.net. Aby przetestować, zamień 'HtmlOutputBuilder' na' IDisposable' i 'HtmlOutpuBuilderTestConvention' za pomocą' AutoMoqCustomization', którą możesz zobacz, że test jest wykonywany. –

+0

Dzięki za poradę. Wciąż muszę spróbować twojej sugestii, ale wrócę do ciebie, gdy tylko zorientuję się, co jest nie tak. – DavidS