2017-02-13 39 views
8

KontekstJak zaimplementować komunikat XUnit descriptive Assert?

w xUnit github Znalazłem to: Add Assert.Equal(expected, actual, message) overload #350(tak deweloper poprosić o nie istniejącej przeciążenia patrz poniżej)

cytat z odpowiedzi:

Jesteśmy wierzący w własny dokumentujący kod; to obejmuje twoje twierdzenia.

(więc zespół xUnit go odrzuci)

OK, rozumiem. Wierzę również w kodowanie samoobsługowe. Nadal nie mogę dowiedzieć się takim przypadku należy:

próbkę

// 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 

Pytanie

Jak mogę wdrożyć opisowy komunikat wymuszenia w tym przypadku w xUnit który jeszcze nie ma takiego przeciążenie?

+0

Nie mam pojęcia, na czym polega problem. Dlaczego nie używasz tylko 'Assert.AreEqual (0, client.ErrorMessage.Length, client.ErrorMessage);' jak wskazałeś w komentarzu? – Kritner

+0

Nie ma takiego przeciążenia w XUnit. To jest połączenie NUnit. Zobacz zdanie zaczynające się od razu: programista prosi o takie przeciążenie, a zespół XUnit odrzuca z powodu cytowanego "Jesteśmy zwolennikami samokodującego kodu, który zawiera twoje twierdzenia" –

+0

@ g.pickardou, Dlaczego nie skorzystać z sugestii pod linkiem. Jak płynne asercje lub twórz własne twierdzenie, które otacza 'Assert.True lub Assert.False', które pozostały przy przeciążeniu wiadomości. Zostało to wspomniane w dalszej części "Możesz dostarczać wiadomości do Assert.True i .False.Jeśli po prostu nie możesz żyć bez wiadomości (i odmówić użycia innego asercji), zawsze możesz wrócić do: Assert.True (numer == 2, "To jest moja wiadomość"); ' – Nkosi

Odpowiedz

6

Skorzystaj z sugestii podanych w linku. Podobnie jak fluent assertions lub stwórz własne stwierdzenie, które owija Assert.True or Assert.False, które pozostały po przeciążeniu wiadomości. Wspomniano dalej

Quote

można dostarczyć wiadomości do Assert.True i .False. Jeśli po prostu nie może żyć bez komunikatów (i odmawiają użyć innego twierdzenie), zawsze można spaść z powrotem do:

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

Quote:

Jeśli naprawdę chcesz mieć wiadomości, można dodać Fluent Assertions lub może xbehave do swoich projektów testowych i użyć ich składni. Fluent Assosions nawet rzuca wyjątki xunit.net, jeśli napotka swoją obecność.

+0

To jest odpowiedź, jednak wciąż nie znajduję/nie bierzemy płynnego przykładu, o którym mówisz w swoim komentarzu –

+0

Trochę to trwało, ale w końcu udało mi się. (Jest to struktura testowa jednostki zillions, którą muszę odebrać i natychmiast pracować z ...) –

+0

Płynne asercje są bardzo łatwe do odebrania. Używam go dużo, a krzywa uczenia się nie była zbyt stroma. – Nkosi