80 Stimmen

Ausnahmemeldungen bei Unit-Tests mit xUnit

Ich bin gerade dabei, meine MsTest-Unit-Tests in xUnit zu konvertieren. Gibt es mit xUnit eine Möglichkeit, Ausnahmemeldungen zu testen? Ist es korrekt, Ausnahmemeldungen zu testen, anstatt nur den Ausnahmetyp?

143voto

the_joric Punkte 11444

Ich denke, es ist richtig, sowohl auf den Ausnahmetyp als auch auf die Meldung zu testen. Und beide sind einfach in xUnit:

var exception = Assert.Throws<AuthenticationException>(() => DoSomething());
Assert.Equal(message, exception.Message);

10voto

user1829319 Punkte 631

Besser ist es, die Methode Record.Exception zu verwenden, da sie dem AAA-Muster entspricht:

    [Fact]
    public void Divide_TwoNumbers_ExpectException()
    {
        var sut = new Calculator();
        var exception = Record.Exception(() => sut.Divide(10, 0));
        Assert.IsType(typeof(DivideByZeroException), exception);
    }

Ich hoffe, das hilft ...

2voto

user2982369 Punkte 21

Etwa so

 var ex = Record.Exception(() => DoSomeThing());
 Assert.IsType(typeof(ArgumentNullException), ex);
 Assert.True(ex.Message.Contains("Your exception message"));

1voto

Andy Creigh Punkte 103

Resharper zieht es übrigens vor, typeof nicht zu verwenden und schlägt stattdessen Assert.IsType vor, z. B.

var ex = Record.Exception(() => new FooController(null, null));
Assert.IsType<ArgumentNullException>(ex);

0voto

RonK Punkte 9156

Eine Ausnahme ist nicht anders als jedes andere erwartete Ergebnis Ihres Tests. Es ist selbstverständlich, zu prüfen, ob die Meldung die richtige ist, da zwei verschiedene Meldungen denselben Ausnahmetyp haben können. Ich persönlich halte dies jedoch nicht für zwingend erforderlich, zumindest nicht bei allen Ausnahmen.

In unserem Projekt ist jeder Anwendungsausnahme auch ein 'Message'-Objekt angehängt, also überprüfen wir die MessageId wird nicht überprüft, ob die Argumente der Nachricht richtig sind oder ob der Text der Nachricht korrekt ist. Lautet der Nachrichtentext z. B. "Falscher Parameter <{0}> wurde übergeben", wird nicht überprüft, ob das Argument, das an das Format {0} übergeben wurde, den Erwartungen entspricht - dies ist nicht beabsichtigt. Die Nachricht hat eine eindeutige ID - wir überprüfen also, ob die MessageID der Ausnahme ist 'WRONG_PARAMETER_PROVIDED'.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X