2017-02-13 3 views
8

KontextWie man XUnit deskriptive Assert Nachricht implementieren?

in XUnit Github ich dies gefunden: Add Assert.Equal(expected, actual, message) overload #350(so ein Entwickler bitten um eine nicht vorhandene Überlastung siehe unten)

Zitat aus der Antwort:

Wir a sind Gläubiger in selbstdokumentiertem Code; das schließt deine Behauptungen ein.

(so die XUnit Team ablehnt)

OK, ich habe es. Ich glaube auch an den selbst dokumentierenden Code. Dennoch kann ich herausfinden, nicht diesen Anwendungsfall:

Probe

// Arrange 
// Create some external soap service client and its wrapper classes 

// Act 
// client.SomeMethod(); 

// Assert 
// Sorry, soap service's interface, behaviour and design is *given* 
// So I have to check if there is no Error, and 
// conveniently if there is, then I would like to see it in the assertion message 

Assert.Equal(0, client.ErrorMessage.Length); // Means no error 

// I would like to have the same result what would be the following *N*U*n*i*t* assert: 
// Assert.AreEqual(0, client.ErrorMessage.Length, client.ErrorMessage); // Means no error 

Frage

Wie kann ich eine beschreibende assert Nachricht in diesem Fall in XUnit implementieren, die noch keine solche eine Überlastung?

+0

Ich bin unklar, was das Problem ist. Warum verwenden Sie nicht einfach 'Assert.AreEqual (0, client.ErrorMessage.Length, client.ErrorMessage);' wie Sie im Kommentar darauf hingewiesen haben? – Kritner

+0

In XUnit gibt es keine solche Überlastung. Das ist ein NUnit-Anruf. Sehen Sie sich den ersten Satz an: Ein Entwickler bittet um eine solche Überladung, und das XUnit-Team lehnt das Zitat "Wir sind ein Anhänger von selbstdokumentiertem Code ab; das schließt Ihre Behauptungen ein" –

+0

@ g.pickardou, Warum nicht die Vorschläge verwenden bereitgestellt am Link. Wie fließende Assertions oder erstellen Sie Ihre eigene Assertion, die die 'Assert.True oder Assert.False' umschließt, die mit ihren Nachrichtenüberladungen belassen wurden. Es wurde weiter unten erwähnt. Sie können Nachrichten für Assert.True und .False bereitstellen.Wenn Sie einfach nicht ohne Nachrichten leben können (und sich weigern, eine andere Behauptung zu verwenden), könnten Sie immer wieder auf folgende Adresse zurückgreifen: Assert.True (Nummer == 2, "This is my message"); ' – Nkosi

Antwort

6

Verwenden Sie die Vorschläge unter dem Link. Wie fluent assertions oder erstellen Sie Ihre eigene Behauptung, die die Wraps, die mit ihren Nachrichtenüberladungen verlassen wurden. Es wurde ferner erwähnt unten

Quote

Sie Nachrichten an Assert.True und .FALSE zur Verfügung stellen kann. Wenn Sie einfach nicht ohne Nachrichten leben können (und sich weigern, eine andere Behauptung verwenden), könnte man immer zurückgreifen zu:

Assert.True(number == 2, "This is my message"); 

Quote:

Wenn Sie wirklich wollen Nachrichten haben Sie könnte Fluent Assertions oder vielleicht xbehave zu Ihren Testprojekten hinzufügen und deren Syntax verwenden. Fluent Assertions löst sogar xunit.net-Ausnahmen aus, wenn es auf seine Anwesenheit trifft.

+0

Das ist eine Antwort, aber ich finde immer noch nicht die fließende Probe, die Sie in Ihrem Kommentar beziehen –

+0

Es dauerte Zeit, aber endlich habe ich es. (Es ist das Billionen-Unit-Test-Framework, das ich abholen und sofort mit ... arbeiten muss) –

+0

Fließende Assertions ist sehr leicht zu erlernen. Ich benutze es sehr und die Lernkurve war nicht steil. – Nkosi

Verwandte Themen