我有一个单元测试,它调用传入字符串的对象上的方法。
调用该方法的第一件事就是检查字符串是否为null或为空。
但是,无论filePath的值是什么,对string.IsNullOrEmpty的调用都为true。见下图。
我在这里遗漏了什么吗?
编辑:
检查null和string.Empty分别按预期工作:
编辑2:
我已经清理了解决方案,通过文件系统删除了bin目录,并且在重建之后,调试器显示应抛出ArgumentNullException,尽管实际上没有被抛出。
答案 0 :(得分:5)
filePath
的内容绝对不是空的(而不是空的),因此我们有两个选择:
filePath
,在null时为空<强>更新强>
您的问题更新让我觉得第二个选项(上述选项)是
答案 1 :(得分:0)
我在使用If String.IsNullOrEmpty(foo)
的Visual Basic中也遇到过这种情况。我同意Andrei的评论,这似乎是调试器如何可视化这个特定结构的错误。
清洁/重建不影响它。有趣的是,如果在If
语句中添加更复杂的主体,调试器将仅在主体的最后一行上暂停(即黄色箭头)。它不实际执行代码行。
如果有人能够让我们了解为什么会发生这种情况,那将会很有趣。
以下是我看到的代码:
请注意,调试器箭头位于e.Cancel = True
行,即使myItem.Subject
不 null。当我按F10时,箭头将前进到ElseIf语句,e.Cancel
仍然是False。
此外,虽然调试器在此行上,但我不能像往常一样将箭头拖动到不同的行。如果我试图通过拖动黄色箭头移动到另一行,我会收到以下错误:
答案 2 :(得分:0)
这是我第一次遇到这个问题。
我们现在采取的方式是在IF声明的背面添加以下内容。
#if DEBUG
else
{
// A hack to fix the debugger issue on the IsNullOrEmpty statement above.
}
#endif