Edycja 2 xUnit 2 ostatecznie zakończyło przenoszenie twierdzeń do osobnego zespołu. W NuGet są to pakiety zarówno skompilowane, jak i źródłowe, a klasa Assert
jest częściowa, więc używając tylko wersji źródłowej pakietu, Assert
staje się bardzo łatwo rozszerzalna (w języku C#).
Edit Więcej kompletności: xUnit 2 usuwa ten punkt rozszerzenia i zaleca stosowanie metod przedłużenie wzdłuż linii „biegle” bibliotek twierdzenia.
Dla kompletności, oto opis „oficjalny” sposób przedłużenia Assert
(który nieoczekiwanie nie została wymieniona w ogóle, pomimo faktu, że Brad Wilson nawet dołączył do dyskusji).
Od wersji 1.5 (zgodnie z blogem Brada), xUnit.Extensions ma jawną obsługę tego poprzez klasy Assertions
i TestClass
. To działa tak:
TestClass
ma właściwość o nazwie Assert
że jest typu Assertions
który przekierowuje wszystkie metody na Xunit.Assert
. Ponieważ TestClass.Assert
jest instancją, można dodać metod do niego za pomocą metod wewnętrznych na Assertions
:
public static class AssertionsExtensions
{
public static void DeepEquals(this Assertions assertions, XNode expected, XNode actual)
{
assertions.True(XNode.DeepEquals(expected, actual)); // You can also use Assert.True here, there's effectively no difference.
}
}
Teraz trzeba mieć klasa testy pochodzą z Xunit.Extensions.TestClass
(myląco, istnieje również Xunit.TestClass
, który jest nie to, co chcesz), a właściwość Assert
"zasłoni" typ Xunit.Assert
, jeśli nie zostanie jawnie zakwalifikowana nazwa.
w klasie testowej, która wywodzi się z TestClass
można teraz używać
Assert.DeepEquals(expectedXml, actualXml);
Jedyną prawdziwą różnicę z wbudowaną xUnit twierdzenie (oprócz faktu, że kolorowania dla Assert
składnia jest, że z identyfikatorem , a nie typ) polega na tym, że gdy się nie powiedzie, otrzymujesz po prostu TrueException
, a nie konkretną DeepEqualsException
, która może hipotetycznie powiedzieć, że porównanie nie powiodło się. Ale oczywiście możesz to zbudować w ten sam sposób.
Dzięki, że wyjaśnia, dlaczego nie mogę dostać assert przedłużyć jak chciałem. Twoje rozwiązanie jest prawie tym, co w końcu robiłem, ale nazwałem moje 'SeleniumAssert.ElementPresent (...);' – Neil
Dla xUnit 2, sprawdź przykłady, takie jak https://github.com/xunit/samples.xunit /blob/master/AssertExtensions/StringAssertionExtensions.cs – Jedidja