2016-06-16 10 views
3

Ich versuche Unit-Test mit xUnit.net zu tun. Ich möchte einen 'Theorie' Test mit '[InlineData]', der 'Dezimalzahlen' enthält :Einen tatsächlichen Dezimalwert als Parameter für ein Attribut haben (Beispiel xUnit.net's [InlineData]

[Theory] 
[InlineData(37.60M)] 
public void MyDecimalTest(decimal number) 
{ 
    Assert.Equal(number, 37.60M); 
} 

Dies ist nicht möglich, da Sie kein decimal as a constant erstellen kann ich die Problemumgehung put the number in quotes lik so "37.60" gefunden Dies wird tatsächlich wandeln es in ein Doppel, die den Test nicht machen

Frage...:
Gibt es eine Abhilfe dafür? Nein, was ist der einfachste Weg, mehrere Testfälle für meinen Test zu erstellen?

+3

siehe auch [Warum „dezimal“ -Attribut Parametertyp? Kein gültiger ist] (http://stackoverflow.com/questions/3192833/) –

Antwort

6

Sie sollten in der Lage sein, den String-Wert im Attribut zu verwenden und den Parameter-Typ auf Dezimal zu setzen, es wird automatisch vom Test-Framework konvertiert, soweit ich das beurteilen kann.

[Theory] 
[InlineData("37.60")] 
public void MyDecimalTest(Decimal number) 
{ 
    Assert.Equal(number, 37.60M); 
} 

Wenn dies nicht funktioniert, können Sie es manuell konvertieren, indem Sie einen String-Parameter übergeben.

[Theory] 
[InlineData("37.60")] 
public void MyDecimalTest(String number) 
{ 
    var d = Convert.ToDecimal(number); 
    Assert.Equal(d, 37.60M); 
} 
+0

Nette Idee. Ein bisschen sauberer als den anderen Wert zu verdoppeln. Immer noch hacky. –

+0

@TimPohlmann Ich habe meine Antwort basierend auf weiteren Experimenten aktualisiert, wo die Tests auf meinem Rechner laufen – DaveShaw

+1

Ja, das funktioniert. Ich habe es schon einmal versucht, aber ein anderes Problem ist fehlgeschlagen, und ich habe einfach angenommen, dass es zu einem Double konvertiert wurde. Mein Fehler. Vielen Dank! –