Question

Je suis tout à fait nouveau pour TDD et je vais avec NUnit et Moq. J'ai une méthode où j'attends une exception, donc je voulais jouer un peu avec les caractéristiques des cadres.

Mon code de test se présente comme suit:

    [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"
        );
    }

Mais je reçois toujours le errormessage que le message d'erreur que le message d'exception réelle diffère du message attendu. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Malheureusement, coureur de test ReSharper a un bug / limitation - il ne gère pas les attributs ExpectedException. Vous avez 2 options:

  1. Utilisez un autre coureur de test (par exemple nunit-gui.exe, livré avec NUnit) - mais cette approche permet une douleur à déboguer vos tests

  2. Catch et valider l'exception manuellement, en utilisant le schéma suivant:

    [Test] Write_MessageLogWithCategoryInfoFail public void () {     essayer     {       chaîne message = "Message d'information Test";

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

    }

Son vraiment dommage, parce que la façon descriptive de dire que vous vous attendez à une exception est beaucoup plus agréable!

Sur une note de côté, j'espère que le code ci-dessus est uniquement pour jouer avec le cadre - vous généralement jamais attraper MockExceptions:)

Autres conseils

Vous pouvez utiliser le paramètre supplémentaire MatchType = MessageMatch.Regex.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top