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?
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
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.