Por que esse método de extensão de cadeia não gera uma exceção?

Eu tenho um método de extensão de string C # que deve retornar umIEnumerable<int> de todos os índices de uma substring dentro de uma string. Funciona perfeitamente para a finalidade pretendida e os resultados esperados são retornados (como comprovado por um dos meus testes, embora não o abaixo), mas outro teste de unidade descobriu um problema: ele não pode lidar com argumentos nulos.

Aqui está o método de extensão que estou testando:

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;
    }
}

Aqui está o teste que sinalizou o problema:

[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Extensions_AllIndexesOf_HandlesNullArguments()
{
    string test = "a.b.c.d.e";
    test.AllIndexesOf(null);
}

Quando o teste é executado no meu método de extensão, ele falha, com a mensagem de erro padrão de que o método "não lançou uma exceção".

Isso é confuso: eu claramente passeinull para a função, mas por algum motivo a comparaçãonull == null está voltandofalse. Portanto, nenhuma exceção é lançada e o código continua.

Confirmei que este não é um erro no teste: ao executar o método no meu projeto principal com uma chamada paraConsole.WriteLine na comparação nulaif bloco, nada é mostrado no console e nenhuma exceção é capturada por nenhumcatch bloco eu adiciono. Além disso, usandostring.IsNullOrEmpty ao invés de== null tem o mesmo problema.

Por que essa comparação supostamente simples falha?

questionAnswers(3)

yourAnswerToTheQuestion