Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MS单元测试中的异常?_C#_Unit Testing_Expected Exception - Fatal编程技术网

C# MS单元测试中的异常?

C# MS单元测试中的异常?,c#,unit-testing,expected-exception,C#,Unit Testing,Expected Exception,我为我的项目的一个方法创建了一个单元测试。当找不到文件时,该方法会引发异常。我为此编写了一个单元测试,但当引发异常时,我仍然无法通过测试 方法是 public string[] GetBuildMachineNames(string path) { string[] machineNames = null; XDocument doc = XDocument.Load(path); foreach (XElement child in doc.Root.Element

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

方法是

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");
}
我应该在方法中处理异常还是缺少其他内容

编辑:


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

在单元测试中,您似乎正在部署一个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");
}

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

我从未真正理解
ExpectedException
的意义。您应该能够在代码中而不是在属性中捕获异常。这是一个更好的实践,还允许您在它被提出后做一些事情(例如,更多的验证)。。。此外,它还可以让您在调试器中停止代码并进行检查,而无需在论坛中询问。:)

我会使用Assert.Throws(TestDelegate代码)

请参阅。

否!!即使我通过了,但它给出了错误的路径,所以其他测试也失败了,因为路径不正确,所以这个特殊测试应该通过,我为文件nt编写的内容发现了异常。@Pawan,
FileNotFoundException
实际上是在
GetBuildMachineNames
方法中抛出的吗?如果是,则该测试应通过。如果没有异常或抛出其他类型的异常,测试将失败。对不起,我是这方面的新手。事实上,我没有运行单元测试,我正在调试。。。。以上代码是正确的。Jst我所做的一个修改是在我设置为“总是复制”的文件属性中,错误消息是什么?是否引发了不同的异常?或者根本没有?找不到文件!!实际上,我在单元测试项目中添加了测试数据,但没有将属性“copy to output directory”更改为“always copy”。。。。现在问题解决了。无论如何,谢谢尝试捕获异常应该在主代码中,而不是在单元测试中。示例是使用MSunit测试的Nuint,m。