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.

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top