我有一个C#字符串扩展方法,它应该返回一个字符串中子字符串的所有索引的IEnumerable<int>
。它完美地达到了预期的目的,并返回了预期的结果(我的一个测试证明了这一点,但不是下面的那个),但是另一个单元测试发现了它的一个问题:它不能处理null参数。
下面是我正在测试的扩展方法:
public static IEnumerable<int> AllIndexesOf(this string str, string searchText)
{
if (searchText == null)
{
throw new ArgumentNullException("searchText");
}
for (int index = 0; ; index += searchText.Length)
{
index = str.IndexOf(searchText, index);
if (index == -1)
break;
yield return index;
}
}
下面的测试指出了这个问题:
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Extensions_AllIndexesOf_HandlesNullArguments()
{
string test = "a.b.c.d.e";
test.AllIndexesOf(null);
}
当测试针对我的扩展方法运行时,它会失败,并显示标准错误消息,表明该方法“未抛出异常”。
这很令人困惑:我明确地将null
传递给了函数,但是由于某些原因,比较null == null
返回false
。因此,不会抛出异常,代码会继续执行。
我已经确认这不是测试的bug :在我的主项目中通过调用空比较if
块中的Console.WriteLine
来运行该方法时,控制台上没有显示任何内容,并且我添加的任何catch
块都没有捕获任何异常。此外,使用string.IsNullOrEmpty
而不是== null
也有同样的问题。
为什么这种所谓的简单比较会失败呢?
https://stackoverflow.com/questions/30176121
复制相似问题