Почему этот метод расширения строки не вызывает исключение?
У меня есть метод расширения строки C #, который должен вернутьIEnumerable<int>
всех индексов подстроки в строке. Он отлично работает по назначению, и ожидаемые результаты возвращаются (как доказано одним из моих тестов, но не тем, что приведен ниже), но другой модульный тест обнаружил проблему с ним: он не может обрабатывать нулевые аргументы.
Вот метод расширения, который я тестирую:
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
, Следовательно, исключение не выдается, и код продолжается.
Я подтвердил, что это не ошибка теста: при запуске метода в моем основном проекте с вызовомConsole.WriteLine
в нулевом сравненииif
блок, на консоли ничего не отображается и никакое исключение не перехватываетсяcatch
Блок я добавляю. Кроме того, используяstring.IsNullOrEmpty
вместо== null
имеет ту же проблему.
Почему это якобы простое сравнение не удается?