¿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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta