Domanda

Ho creato uno unit test per un metodo del mio progetto.Questo metodo solleva un'eccezione quando un file non viene trovato.Ho scritto uno unit test per questo, ma non sono ancora in grado di superare il test quando viene sollevata l'eccezione.

Il metodo è

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;
}

Test unitario

[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");
}

Devo gestire l'eccezione nel metodo o mi manca qualcos'altro ??

MODIFICA:

Il percorso che sto passando non è quello per trovare il file, quindi questo test dovrebbe passare ... cioè cosa succede se il file non esiste in quel percorso.

È stato utile?

Soluzione

Nel tuo unit test sembra che tu stia distribuendo un file xml: TestData\BuildMachineNoNames.xml che stai passando al GetBuildMachineNames.Quindi il file esiste e non puoi aspettarti che venga lanciato un FileNotFoundException.Quindi forse in questo modo:

[TestMethod]
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
    var configReaderNoFile = new ConfigReader();
    var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml");
}

Altri suggerimenti

Inserendo l'attributo [ExpectedException (typeof (FileNotFoundException), "Raise exception when file not found")] ci si aspetta che il metodo lancerà un'eccezione FileNotFoundException, se il Test FileNotFoundException non lanciato fallirà.Altrimenti il test avrà esito positivo.

Non ho mai veramente capito il punto di ExpectedException.Dovresti essere in grado di catturare l'eccezione nel codice piuttosto che negli attributi.È una pratica migliore e ti consente anche di fare cose dopo che è stato sollevato (ad esempio più convalide) ... Inoltre ti permetterebbe di fermare il codice nel debugger e controllare le cose piuttosto che chiedere nei forum.:)

Userei Assert.Throws (codice TestDelegate) ;.
Vedi qui un esempio .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top