2013-05-30 14 views
5

Da der folgende Test:AutoFixture: Property und heterogene Parameter

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

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

    sut.DoSomething(); 
    // More code 
} 

Ich will Befestigungs Schöpfung in ihrer eigenen Klasse kapseln, so etwas wie:

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

Das Problem ist, dass ich bin mit PropertyData und letzterer liefert zwei Eingabeparameter. Die Tatsache, dass ich dann versuche, mein Fixture automatisch als Parameter zu erzeugen, verursacht eine Ausnahme.

Hier ist die 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 dieses Problem zu beheben?

+0

Wie sieht das 'CustomPropertyData' aus? –

+0

@NikosBaxevanis Ich habe das OP aktualisiert. Ich habe versucht, meinen Code nach http://nikosbaxevanis.com/2012/07/27/composite-xunit-net-data-attributes/ zu schreiben. – DavidS

Antwort

3

Sie müssen wie unten Daten an die PropertyDataAttribute liefern:

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

Der patientId Wert , der patientFirstName Wert sein wird, wird sein abc und der SUT-Wert wird automatisch zugeführt werden, indem man AutoFixture.

Die CustomPropertyDataAttribute sieht gut aus.

+0

Ok, lass mich zurück zum Zeichenbrett gehen, weil ich ziemlich genau das gemacht habe, was du vorgeschlagen hast. Allerdings habe ich eine Ausnahme bekommen. Ich werde es noch einmal versuchen und versuchen, es zu tun, wenn es sein muss. Danke für Ihre Hilfe. – DavidS

+0

Es sieht so aus, als ob etwas mit der 'HtmlOutpuBuilderTestConvention' oder einer Frage mit dem' PropertyDataAttribute' in xUnit.net Foren falsch ist. Um es zu testen, ersetzen Sie 'HtmlOutputBuilder' durch' IDisposable' und 'HtmlOutpuBuilderTestConvention' durch' AutoMoqCustomization' Beachten Sie, dass der Test ausgeführt wird. –

+0

Danke für den Rat. Ich muss dir immer noch einen Vorschlag machen, aber ich melde mich wieder, wenn ich herausgefunden habe, was los ist. – DavidS

Verwandte Themen