¿Por qué este método de extensión de cadena no produce una excepción?
Tengo un método de extensión de cadena C # que debería devolver unIEnumerable<int>
de todos los índices de una subcadena dentro de una cadena. Funciona perfectamente para su propósito previsto y se devuelven los resultados esperados (como lo demostró una de mis pruebas, aunque no la siguiente), pero otra prueba unitaria ha descubierto un problema con ella: no puede manejar argumentos nulos.
Aquí está el método de extensión que estoy probando:
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;
}
}
Aquí está la prueba que marcó el problema:
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Extensions_AllIndexesOf_HandlesNullArguments()
{
string test = "a.b.c.d.e";
test.AllIndexesOf(null);
}
Cuando la prueba se ejecuta contra mi método de extensión, falla, con el mensaje de error estándar de que el método "no arrojó una excepción".
Esto es confuso: claramente he pasadonull
en la función, pero por alguna razón la comparaciónnull == null
está volviendofalse
. Por lo tanto, no se produce ninguna excepción y el código continúa.
He confirmado que esto no es un error con la prueba: cuando ejecuto el método en mi proyecto principal con una llamada aConsole.WriteLine
en la comparación nulaif
bloque, no se muestra nada en la consola y ninguna excepción es detectada por ningúncatch
bloque agrego. Además, usandostring.IsNullOrEmpty
en lugar de== null
tiene el mismo problema
¿Por qué falla esta comparación supuestamente simple?