5 Stimmen

AutoFixture: PropertyData und heterogene Parameter

Angesichts des folgenden Tests:

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

    var sut = fixture.Create();

    sut.DoSomething();
    // Mehr Code
}

Ich möchte die Erstellung der Vorrichtung in eine eigene Klasse kapseln, so etwas wie:

[Theorie]
[CustomPropertyData("GetValidInputForDb")]
public void GivenValidInputShouldOutputCorrectResult(
    string patientId
    , string patientFirstName
    , HtmlOutputBuilder sut
)
{
    sut.DoSomething();
    // Mehr Code
}

Das Problem ist, dass ich PropertyData verwende und letzteres zwei Eingabeparameter bereitstellt. Die Tatsache, dass ich dann versuche, meine Vorrichtung automatisch als Parameter zu erstellen, führt zu einer Ausnahme.

Hier ist das CustomPropertyData:

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

    }
}

Was sind die Optionen, um dieses Problem zu lösen?

3voto

Nikos Baxevanis Punkte 10486

Sie müssen Daten für das PropertyDataAttribute wie folgt bereitstellen:

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

Der Wert von patientId wird 123 sein, der Wert von patientFirstName wird abc sein und der SUT-Wert wird automatisch von AutoFixture bereitgestellt.

Das CustomPropertyDataAttribute sieht gut aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X