133 votes

Paramétrage des tests dans xUnit.net similaire à NUnit

Existe-t-il dans le framework xUnit.net des moyens 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ère 8 tests distincts dans l'interface graphique de 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 permettra de générer 5 tests distincts et de comparer 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 permettra de générer 6 tests combinatoires. Inestimable.

Il y a quelques années, j'ai essayé xUnit et je l'ai adoré, mais il manquait ces fonctionnalités. Je ne peux plus m'en passer. Est-ce que quelque chose a changé ?

12voto

Peter Points 186

J'ai pris en compte toutes les réponses données ici et j'ai en plus utilisé la fonction XUnit TheoryData<,> pour me donner des définitions de données simples, faciles à lire et sûres pour l'attribut "MemberData" de mon test, comme dans cet exemple :

/// must be public & static for MemberDataAttr to use
public static TheoryData<int, bool, string> DataForTest1 = new TheoryData<int, bool, string> {
    { 1, true, "First" },
    { 2, false, "Second" },
    { 3, true, "Third" }
};

[Theory(DisplayName = "My First Test"), MemberData(nameof(DataForTest1))]
public void Test1(int valA, bool valB, string valC)
{
    Debug.WriteLine($"Running {nameof(Test1)} with values: {valA}, {valB} & {valC} ");
}

Three tests runs observed from test explorer for 'My First Test'


NB utilisant VS2017(15.3.3), C#7, & XUnit 2.2.0 pour .NET Core

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X