5

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

方法是

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

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

编辑:

我通过的路径不是找到文件的路径,所以这个测试应该通过......即如果该路径中不存在文件怎么办。

4

3 回答 3

7

在您的单元测试中,您似乎正在部署一个 xml 文件:TestData\BuildMachineNoNames.xml您将其传递给GetBuildMachineNames. 所以文件存在,你不能期望 aFileNotFoundException被抛出。所以可能是这样的:

[TestMethod]
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
    var configReaderNoFile = new ConfigReader();
    var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml");
}
于 2011-02-04T10:26:43.277 回答
1

通过放置 [ExpectedException(typeof(FileNotFoundException),"Raise exception when file not found")] 属性,您期望该方法将抛出 FileNotFoundException,如果未抛出 FileNotFoundException 测试将失败。否则测试会成功。

于 2011-02-04T11:25:22.603 回答
0

我从来没有真正理解过ExpectedException。您应该能够在代码中而不是在属性中捕获异常。这是一种更好的做法,还允许您在它被提出后做一些事情(例如更多的验证)......它还可以让您在调试器中停止代码并检查事情,而不是需要在论坛中询问。:)

我会使用 Assert.Throws(TestDelegate code);。
请参阅此处的示例

于 2011-02-04T22:34:03.473 回答