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?