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。