Search code examples
c#unit-testingexpected-exception

Exception in MS Unit Test?


I created a unit test for a method of my project. That method raises an exception when a file is not found. I wrote a unit test for that, but I'm still not able to pass the test when the exception is raised.

Method is

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

Should I handle the Exception in the method or am I missing something else??

EDIT:

The path I am passing is not the one to find the file, so this test should pass... i.e. what if file not exists in that path.


Solution

  • In your unit test it seems that you are deploying an xml file: TestData\BuildMachineNoNames.xml which you are passing to the GetBuildMachineNames. So the file exists and you cannot expect a FileNotFoundException to be thrown. So maybe like this:

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