Pregunta

Creé una prueba unitaria para un método de mi proyecto.Ese método genera una excepción cuando no se encuentra un archivo.Escribí una prueba unitaria para eso, pero todavía no puedo pasar la prueba cuando se genera la excepción.

El método es

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

Prueba de unidad

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

¿Debo manejar la excepción en el método o me falta algo más?

EDITAR:

La ruta que estoy pasando no es la que busca el archivo, por lo que esta prueba debería pasar...es decir.¿Qué pasa si el archivo no existe en esa ruta?

¿Fue útil?

Solución

En su prueba unitaria parece que está implementando un archivo xml: TestData\BuildMachineNoNames.xml que estás pasando al GetBuildMachineNames.Entonces el archivo existe y no puedes esperar un FileNotFoundException para ser arrojado.Entonces tal vez así:

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

Otros consejos

Al poner el atributo [ExpectedException (typeof (FileNotFoundException), "Generar excepción cuando el archivo no se encuentra")], está esperando que el método arroje una FileNotFoundException, si la prueba FileNotFoundException no arrojada fallará.De lo contrario, la prueba será un éxito.

Nunca entendí realmente el sentido de ExpectedException.Debería poder detectar la excepción en el código en lugar de en los atributos.Es una mejor práctica y también le permite hacer cosas después de que se genera (por ejemplo, más validaciones) ... También le permitiría detener el código en el depurador y verificar las cosas en lugar de tener que preguntar en los foros.:)

Usaría Assert.Throws (código TestDelegate) ;.
Vea aquí un ejemplo .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top