Question

J'ai créé un test unitaire pour une méthode de mon projet. Cette méthode soulève une exception lorsqu'un fichier n'est pas trouvé. J'ai écrit un test unitaire pour cela, mais je ne suis toujours pas en mesure de passer le test lorsque l'exception est élevée.

La méthode est

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 de l'unité

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

Dois-je gérer l'exception dans la méthode ou est-ce que je manque autre chose ??

ÉDITER:

Le chemin que je passe n'est pas celui qui trouve le fichier, donc ce test devrait passer ... c'est-à-dire que si le fichier n'existe pas dans ce chemin.

Était-ce utile?

La solution

Dans votre test unitaire, il semble que vous déployiez un fichier XML: TestData\BuildMachineNoNames.xml que vous passez au GetBuildMachineNames. Donc le fichier existe et vous ne pouvez pas vous attendre à un FileNotFoundException à lancer. Alors peut-être comme ça:

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

Autres conseils

En mettant [attendException (typeof (filenotFoundException), "augmenter l'exception lorsque le fichier introuvable")] Attribut Vous vous attendez à ce que la méthode lance un test de filenotfoundException, si le test de filenotFoundException non lancé échouera. Sinon, le test sera le succès.

Je n'ai jamais vraiment compris le point de ExpectedException. Vous devriez être en mesure de prendre une exception dans le code plutôt que dans les attributs. C'est une meilleure pratique et vous permet également de faire des choses après qu'elle soit augmentée (par exemple plus de validations) ... elle vous permettrait également d'arrêter le code dans le débogueur et de vérifier les choses plutôt que de demander des forums. :)

J'utiliserais Assert.Throws (code TestDelegate);.
Voir Ici un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top