2013-05-30 8 views
5

Dato il seguente test:AutoFixture: PropertyData e parametri eterogenei

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

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

    sut.DoSomething(); 
    // More code 
} 

voglio incapsulare creazione appuntamento fisso nella sua stessa classe, qualcosa di simile a:

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

Il problema è che sono utilizzando PropertyData e quest'ultimo fornisce due parametri di input. Il fatto che sto cercando di creare automaticamente il mio dispositivo come parametro sta causando un'eccezione.

Ecco la CustomPropertyData:

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

    } 
} 

Quali sono le opzioni per risolvere questo?

+0

Come appare il 'CustomPropertyData'? –

+0

@NikosBaxevanis Ho aggiornato l'OP. Ho provato a scrivere il mio codice come da http://nikosbaxevanis.com/2012/07/27/composite-xunit-net-data-attributes/. – DavidS

risposta

3

è necessario fornire i dati al PropertyDataAttribute come di seguito:

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

Il valore patientId sarà , il valore patientFirstName sarà abc e il valore SUT sta per essere forniti automaticamente AutoFixture.

Il CustomPropertyDataAttribute sembra buono.

+0

Ok lasciami tornare al tavolo da disegno perché ho praticamente fatto quello che mi hai suggerito. Tuttavia, ho ottenuto un'eccezione. Ci proverò di nuovo e cercherò di analizzarlo se necessario. Grazie per l'aiuto. – DavidS

+0

Sembra che sia qualcosa di sbagliato con 'HtmlOutpuBuilderTestConvention' o forse una domanda per il targeting' PropertyDataAttribute' nei forum xUnit.net .. Per testarlo sostituisce 'HtmlOutputBuilder' con' IDisposable' e 'HtmlOutpuBuilderTestConvention' con' AutoMoqCustomization' che puoi vedere che il test viene eseguito. –

+0

Grazie per il consiglio. Devo ancora provare il tuo suggerimento, ma ti ricontatterò non appena avrò capito cosa c'è che non va. – DavidS