web-dev-qa-db-fra.com

passer les paramètres du scénario de test à l'aide de la console nunit

Je développe des tests en utilisant l'approche Nunit et tests pilotés par les données. J'ai une méthode de test avec 2 paramètres: chemin d'accès au fichier xlsx et nom de la feuille de calcul. Cela fonctionne parfaitement dans Visual Studio lorsque je passe des paramètres dans l'attribut TestCase, par exemple lorsque je veux exécuter 3 cas de test, je dois écrire quelque chose comme ceci:

[TestCase(@"pathToFile.xlsx", "TestCase1")]
[TestCase(@"pathToFile.xlsx", "TestCase2")]
[TestCase(@"pathToFile.xlsx", "TestCase3")]
public void performActionsByWorksheet(string excelFilePath, string worksheetName)
{    
    //test code
}

Je voudrais exécuter mes cas de test et passer des paramètres en utilisant Nunit Console (ne pas écrire de paramètres dans le code).

Est-il possible d'y parvenir?

15
kotoj

Si vous utilisez NUnit 3, vous pouvez utiliser la propriété TestContext.Parameters:

[Test]
public void performActionsByWorksheet()
{
    string excelFilePath = TestContext.Parameters["excelFilePath"];
    string worksheetName = TestContext.Parameters["worksheetName"];
    TestContext.WriteLine(excelFilePath);
    TestContext.WriteLine(worksheetName);
}

et --params argument de ligne de commande:

nunit3-console.exe path/to/your/test.dll --params=excelFilePath=testPath;worksheetName=testName
30
Vadim Pashkov

J'ai trouvé une solution de contournement pour de nombreux cas de test, en utilisant TestCaseSource.
Code de test:

[Test, TestCaseSource("testData")]
public void performActionsByWorksheet(string excelFilePath, string worksheetName)
{
    Console.WriteLine("Excel filePath: {0}", excelFilePath);
    Console.WriteLine("worksheet Name: {0}", worksheetName);
}

Obtention des données de test à partir du fichier csv:

static object[] testData()
{
    var reader = new StreamReader(File.OpenRead(@"TestCases.csv"));
    List<object[]> rows = new List<object[]>();

    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var values = line.Split(',');
        rows.Add(values);
    }

    return rows.ToArray<object[]>();                        
}

et je stocke tous les cas de test que je veux exécuter (chemins de fichiers et noms de feuilles de calcul) dans un fichier csv. Ce n'est peut-être pas la meilleure solution, mais j'ai atteint mon objectif - ne pas écrire de paramètres dans le code.

3
kotoj