Y a-t-il des moyens dans le framework xUnit.net similaires aux fonctionnalités suivantes de NUnit?
[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
}
Cela générera 8 tests séparés dans l'interface graphique NUnit
[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"; }
Cela générera 5 tests séparés et comparera automatiquement les résultats ( Assert.Equal()
).
[Test]
public void StateTest(
[Values(1, 10)]
int input,
[Values(State.Initial, State.Rejected, State.Stopped)]
DocumentType docType
){}
Cela générera 6 tests combinatoires. Inestimable.
Il y a quelques années, j'ai essayé xUnit et j'ai adoré mais il manquait ces fonctionnalités. Je ne peux pas vivre sans eux. Quelque chose a-t-il changé?
Réponses:
xUnit offre un moyen d'exécuter des tests paramétrés via quelque chose appelé théories des données . Le concept est équivalent à celui trouvé dans NUnit mais la fonctionnalité que vous obtenez hors de la boîte n'est pas aussi complète.
Voici un exemple:
Dans cet exemple, xUnit exécutera le
Should_format_the_currency_value_correctly
test une fois pour chaqueInlineDataAttribute
chaque fois en passant la valeur spécifiée comme argument.Les théories des données sont un point d'extensibilité que vous pouvez utiliser pour créer de nouvelles façons d'exécuter vos tests paramétrés. La façon dont cela est fait est de créer de nouveaux attributs qui inspectent et agissent éventuellement sur les arguments et la valeur de retour des méthodes de test.
Vous pouvez trouver un bon exemple concret de la façon dont les théories de données de xUnit peuvent être étendues dans AutoFixture de Autodata et InlineAutoData théories.
la source
[Theory]
attribut n'est pas disponible.Permettez-moi de jeter un autre échantillon ici, juste au cas où cela ferait gagner du temps à quelqu'un.
la source
Lors de votre première demande, vous pouvez suivre les exemples trouvés ici .
Vous pouvez construire une classe statique contenant les données nécessaires à une collection de tests
Ensuite, à l'aide de l'attribut MemberData, définissez le test en tant que tel
ou si vous utilisez C # 6.0,
Le premier argument de MemberDataAttribute vous permet de définir le membre que vous utilisez comme source de données, de sorte que vous disposez d'une assez grande flexibilité lors de la réutilisation.
la source
Selon cet article de xUnit, vous avez trois options de "paramétrage":
Exemple InlineData
Exemple de ClassData
Exemple MemberData
la source
J'ai trouvé une bibliothèque qui produit une fonctionnalité équivalente à l'
[Values]
attribut de NUnit appelé Xunit .Il vous permet de spécifier des valeurs au niveau des paramètres:
Ou vous pouvez implicitement lui faire comprendre le nombre minimal d'appels pour couvrir toutes les combinaisons possibles:
la source
J'ai pris en compte toutes les réponses ici et j'ai également utilisé les
TheoryData<,>
types génériques de XUnit pour me donner des définitions de données simples, faciles à lire et à taper en toute sécurité pour l'attribut 'MemberData' de mon test, comme dans cet exemple:NB Utilisation de VS2017 (15.3.3), C # 7 et XUnit 2.2.0 pour .NET Core
la source