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?

Foi útil?

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:

  1. Use algum outro corredor de teste (por exemplo, Nunit -gui.exe, enviado com NUNIT) - mas essa abordagem torna a dor de depurar seus testes

  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top