6

我有一个单元测试,它调用传入字符串的对象的方法。

被调用的方法所做的第一件事就是检查字符串是否为空或为空。

但是,无论 filePath 的值是什么,对 string.IsNullOrEmpty 的调用都是 true。见下图。

为什么字符串为空或为空

我在这里错过了什么吗?

编辑:

检查 null 和 string.Empty 分别按预期工作:

在此处输入图像描述

编辑2:

我已经清理了解决方案,通过文件系统删除了 bin 目录,但在重建之后,调试器仍然显示应该抛出 ArgumentNullException,尽管它实际上没有被抛出

4

3 回答 3

5

的内容filePath绝对不为空(也不为空),因此我们有两个选择:

  • 您有一个更广泛的范围变量(即全局变量),名为filePath,它在 null 上为空
  • 您的调试器正在引用旧版本的二进制文件。在这种情况下,清除并重建解决方案

更新

您的问题更新让我认为第二个选项(上述)是一个

于 2013-06-17T14:40:18.267 回答
0

我也在 Visual Basic 中使用If String.IsNullOrEmpty(foo). 我同意 Andrei 的评论,这似乎是调试器如何可视化这个特定构造的错误。

清理/重建不影响它。有趣的是,如果您在If语句中添加更复杂的主体,调试器只会在主体的最后一行暂停(即黄色箭头) 。它实际上并不执行代码行。

如果有人能给我们一些关于为什么会发生这种情况的见解,那将会很有趣。

这是我看到的代码:

在此处输入图像描述

请注意,调试器箭头在 line 上e.Cancel = True,即使myItem.Subject为空。当我按 F10 时,箭头将前进到 ElseIf 语句,并且e.Cancel仍然为 False。

此外,当调试器在这一行时,我不能像往常那样将箭头拖到不同的行。如果我试图通过拖动黄色箭头移动到另一行,我会收到以下错误:

在此处输入图像描述

于 2015-07-02T13:40:49.410 回答
0

这是我第一次遇到这个问题。

我们现在绕过它的方法是在 IF 语句的后面添加以下内容。

#if DEBUG
            else
            {
                // A hack to fix the debugger issue on the IsNullOrEmpty statement above.
            }
#endif
于 2015-07-03T11:17:18.330 回答