MS单元测试中的例外情况?

时间:2011-02-04 10:23:49

标签: c# unit-testing expected-exception

我为我的项目方法创建了一个单元测试。当找不到文件时,该方法引发异常。我为此编写了一个单元测试,但是在引发异常时我仍然无法通过测试。

方法

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

单元测试

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

我应该处理方法中的异常还是我错过了其他的东西?

编辑:

我传递的路径不是找到该文件的路径,因此该测试应该通过...即如果该路径中不存在该文件该怎么办。

3 个答案:

答案 0 :(得分:6)

在您的单元测试中,您似乎正在部署一个xml文件:TestData\BuildMachineNoNames.xml,您将其传递给GetBuildMachineNames。因此该文件存在,您不能指望抛出FileNotFoundException。所以也许这样:

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

答案 1 :(得分:1)

通过将[ExpectedException(typeof(FileNotFoundException),“当找不到文件时引发异常”)]属性,您期望该方法将抛出FileNotFoundException,如果FileNotFoundException未抛出Test将失败。否则测试将成功。

答案 2 :(得分:0)

我从未真正理解ExpectedException的观点。您应该能够在代码中而不是在属性中捕获异常。这是一个更好的做法,也允许你在引发之后做一些事情(例如更多的验证)...它也会让你在调试器中停止代码并检查出来而不需要在论坛中提问。 :)

我使用Assert.Throws(TestDelegate代码);。
请参阅here an example