Eccezione in MS Unit Test?
-
28-10-2019 - |
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.
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 .