Gibt es Mittel im xUnit.net-Framework, die den folgenden Funktionen von NUnit ähneln?
[Test, TestCaseSource("CurrencySamples")]
public void Format_Currency(decimal value, string expected){}
static object[][] CurrencySamples = new object[][]
{
new object[]{ 0m, "0,00"},
new object[]{ 0.0004m, "0,00"},
new object[]{ 5m, "5,00"},
new object[]{ 5.1m, "5,10"},
new object[]{ 5.12m, "5,12"},
new object[]{ 5.1234m, "5,12"},
new object[]{ 5.1250m, "5,13"}, // round
new object[]{ 5.1299m, "5,13"}, // round
}
Dadurch werden 8 separate Tests in der NUnit-GUI generiert
[TestCase((string)null, Result = "1")]
[TestCase("", Result = "1")]
[TestCase(" ", Result = "1")]
[TestCase("1", Result = "2")]
[TestCase(" 1 ", Result = "2")]
public string IncrementDocNumber(string lastNum) { return "some"; }
Dadurch werden 5 separate Tests generiert und die Ergebnisse automatisch verglichen ( Assert.Equal()
).
[Test]
public void StateTest(
[Values(1, 10)]
int input,
[Values(State.Initial, State.Rejected, State.Stopped)]
DocumentType docType
){}
Dies erzeugt 6 kombinatorische Tests. Unbezahlbar.
Vor ein paar Jahren habe ich xUnit ausprobiert und es geliebt, aber es fehlten diese Funktionen. Kann nicht ohne sie leben. Hat sich etwas geändert?
Antworten:
xUnit bietet einen Weg zu laufen parametrisiert Tests durch die so genannte Daten Theorien . Das Konzept entspricht dem in NUnit, aber die Funktionalität, die Sie sofort erhalten, ist nicht so vollständig.
Hier ist ein Beispiel:
In diesem Beispiel führt xUnit den
Should_format_the_currency_value_correctly
TestInlineDataAttribute
jedes Mal einmal aus, wenn der angegebene Wert als Argument übergeben wird.Datentheorien sind ein Erweiterungspunkt , mit dem Sie neue Methoden zum Ausführen Ihrer parametrisierten Tests erstellen können. Dazu werden neue Attribute erstellt , die die Argumente und den Rückgabewert der Testmethoden überprüfen und optional darauf reagieren.
Sie können finden können ein gutes praktisches Beispiel, wie xUnit Daten Theorien erweitert werden AutoFixture ‚s Autodata und InlineAutoData Theorien.
quelle
[Theory]
Attribut nicht verfügbar.Lassen Sie mich hier noch eine Probe werfen, nur für den Fall, dass es jemandem Zeit spart.
quelle
Bei Ihrer ersten Anfrage können Sie den Beispielen hier folgen .
Sie können eine statische Klasse erstellen, die die Daten enthält, die für eine Sammlung von Tests erforderlich sind
Definieren Sie dann mithilfe des MemberData-Attributs den Test als solchen
oder wenn Sie C # 6.0 verwenden,
Mit dem ersten Argument von MemberDataAttribute können Sie das Mitglied definieren, das Sie als Datenquelle verwenden, sodass Sie bei der Wiederverwendung einiges an Flexibilität haben.
quelle
Gemäß diesem Artikel in xUnit haben Sie drei "Parametrisierungs" -Optionen:
InlineData-Beispiel
ClassData-Beispiel
MemberData-Beispiel
quelle
Ich habe eine Bibliothek gefunden, die dem NUnit-
[Values]
Attribut Xunit.Combinatorial entspricht .Hier können Sie Werte auf Parameterebene angeben:
Oder Sie können implizit die minimale Anzahl von Aufrufen ermitteln lassen, um alle möglichen Kombinationen abzudecken:
quelle
Ich habe alle Antworten hier
TheoryData<,>
berücksichtigt und zusätzlich die generischen Typen von XUnit verwendet, um mir einfache, leicht zu lesende und sichere Datendefinitionen für das Attribut 'MemberData' in meinem Test zu geben, wie in diesem Beispiel dargestellt:NB Verwenden von VS2017 (15.3.3), C # 7 und XUnit 2.2.0 für .NET Core
quelle