NUNIT - Esperou
-
25-09-2019 - |
Pergunta
Sou muito novo no TDD e vou com Nunit e Moq. Eu tenho um método em que espero uma exceção, então queria jogar um pouco com os recursos da estrutura.
Meu código de teste parece o seguinte:
[Test]
[ExpectedException(ExpectedException = typeof(MockException), ExpectedMessage = "Actual differs from expected")]
public void Write_MessageLogWithCategoryInfoFail()
{
string message = "Info Test Message";
Write_MessageLogWithCategory(message, "Info");
_LogTest.Verify(writeMessage =>
writeMessage.Info("This should fail"),
"Actual differs from expected"
);
}
Mas sempre recebo o erro de erro de que a mensagem de erro que a mensagem de exceção real difere da mensagem esperada. O que estou fazendo errado?
Solução
Infelizmente, o Resharper Test Runner possui um bug/limitação - ele não lida com os atributos esperados da UPException. Você tem 2 opções:
Use algum outro corredor de teste (por exemplo, Nunit -gui.exe, enviado com NUNIT) - mas essa abordagem torna a dor de depurar seus testes
Pegue e valide a exceção manualmente, usando o seguinte padrão:
Test] public void write_messageLogwithCategoryInfofail () {try {string message = "Info Test Message";
Write_MessageLogWithCategory(message, "Info"); _LogTest.Verify(writeMessage => writeMessage.Info("This should fail"), "Actual differs from expected" ); Assert.Fail("Expected exception"); } catch(MockException e) { Assert.AreEqual("Actual differs from expected", e.Message); }
}
É uma vergonha, porque a maneira descritiva de dizer que você espera uma exceção é muito melhor!
Em uma nota lateral, espero que o código acima seja apenas para brincar com a estrutura - geralmente você nunca pegaria mockexceps :)
Outras dicas
Você pode usar o parâmetro extra MatchType = MessageMatch.Regex
.