Ausnahme im MS Unit Test?
-
28-10-2019 - |
Frage
Ich habe einen Komponententest für eine Methode meines Projekts erstellt.Diese Methode löst eine Ausnahme aus, wenn eine Datei nicht gefunden wird.Ich habe dafür einen Komponententest geschrieben, kann den Test jedoch immer noch nicht bestehen, wenn die Ausnahme ausgelöst wird.
Methode ist
public string[] GetBuildMachineNames(string path)
{
string[] machineNames = null;
XDocument doc = XDocument.Load(path);
foreach (XElement child in doc.Root.Elements("buildMachines"))
{
int i = 0;
XAttribute attribute = child.Attribute("machine");
machineNames[i] = attribute.Value;
}
return machineNames;
}
Unit Test
[TestMethod]
[DeploymentItem("TestData\\BuildMachineNoNames.xml")]
[ExpectedException(typeof(FileNotFoundException),"Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
var configReaderNoFile = new ConfigReader();
var names = configReaderNoFile.GetBuildMachineNames("BuildMachineNoNames.xml");
}
Soll ich die Ausnahme in der Methode behandeln oder fehlt mir etwas anderes?
BEARBEITEN:
Der Pfad, den ich übergebe, ist nicht derjenige, der die Datei findet, daher sollte dieser Test bestanden werden ... d. h. was ist, wenn die Datei in diesem Pfad nicht vorhanden ist.
Lösung
In Ihrem Komponententest scheint es, dass Sie eine XML-Datei bereitstellen: TestData\BuildMachineNoNames.xml
, die Sie an den GetBuildMachineNames
übergeben.Die Datei ist also vorhanden und Sie können nicht erwarten, dass ein FileNotFoundException
ausgelöst wird.Also vielleicht so:
[TestMethod]
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
var configReaderNoFile = new ConfigReader();
var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml");
}
Andere Tipps
Wenn Sie das Attribut [ExpectedException (typeof (FileNotFoundException), "Ausnahme auslösen, wenn Datei nicht gefunden wird")] setzen, erwarten Sie, dass die Methode eine FileNotFoundException auslöst, wenn der nicht ausgelöste Test FileNotFoundException fehlschlägt.Andernfalls wird der Test erfolgreich sein.
Ich habe den Punkt des ExpectedException
nie wirklich verstanden.Sie sollten in der Lage sein, Ausnahmen im Code und nicht in Attributen abzufangen.Es ist eine bessere Vorgehensweise und ermöglicht es Ihnen auch, Dinge zu tun, nachdem sie ausgelöst wurden (z. B. mehr Validierungen) ... Außerdem können Sie den Code im Debugger stoppen und Dinge überprüfen, anstatt in Foren nachfragen zu müssen.:)
Ich würde Assert.Throws (TestDelegate-Code) verwenden.
Siehe hier ein Beispiel .