[英]Issue in catching the thrown exception in Unit Test Case
我有一个采用参数Source Folder / Source File的方法。我已经以某种方式处理代码,如果Source Folder或Source File不存在,它将相应地抛出DirectoryNotFound Exception或FileNotFound Exception。 以下是代码段
Boolean isSourceExist = Directory.Exists(sourceFileorFolder);
Boolean isFileExist = File.Exists(sourceFileorFolder);
if (!(
((isSourceExist == true) && (isFileExist == false)) ||
((isSourceExist == false) && (isFileExist == true))
))
{
if (isSourceExist == false)
throw new DirectoryNotFoundException();
else if (isFileExist == false)
throw new FileNotFoundException();
}
尝试对否定方案(例如,提供一个不存在的文件夹)对该方法进行单元测试时,[ExpectedException(typeof(DirectoryNotFoundException))]在单元测试案例中失败。 但是实际代码会根据输入抛出适当的异常,从而正确响应。
提前致谢
通常,您可以编写两个不同的测试,一个用于文件大小写,另一个用于目录大小写。
无论如何,此代码很可能不会像您期望的那样运行。 如果在sourceFileorFolder
路径上存在文件或目录,则您发布的代码片段将始终抛出。
如果路径以文件形式存在,则抛出DirectoryNotFoundException
,否则抛出FileNotFoundException
。 仅当文件不存在时,您才继续进行而不抛出。
编辑:我错过了!
在大if
语句中。 实际上,此方法永远不会抛出异常,因为只有在文件不存在时才输入第一个if
语句( 不((文件夹和非文件)或(文件而不是文件夹))与不(文件或文件夹)相同 )。 如我上面所写,较小的if
语句的行为。
无需复杂,去除上层的情况
Boolean isSourceExist = Directory.Exists(sourceFileorFolder);
Boolean isFileExist = File.Exists(sourceFileorFolder);
if (isSourceExist == false)
throw new DirectoryNotFoundException();
else if (isFileExist == false)
throw new FileNotFoundException();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.