我为我的项目方法创建了一个单元测试。当找不到文件时,该方法引发异常。我为此编写了一个单元测试,但是在引发异常时我仍然无法通过测试。
方法
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");
}
我应该处理方法中的异常还是我错过了其他的东西?
编辑:
我传递的路径不是找到该文件的路径,因此该测试应该通过...即如果该路径中不存在该文件该怎么办。
答案 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。