Редактировать 2 xUnit 2 в конечном итоге полностью переместил утверждения в отдельную сборку. На NuGet есть и скомпилированные, и только исходные пакеты, а класс Assert
является частичным, поэтому с использованием исходной версии пакета Assert
становится очень легко расширяемым (в C#, то есть).
Редактировать Для получения дополнительной полноты: xUnit 2 удаляет эту точку расширения и рекомендует использовать методы расширения по строкам «свободно» библиотек утверждений.
Для полноты, вот описание «официальных» способ расширения Assert
(что удивительно не упоминается вовсе, несмотря на то, что Брэд Уилсон даже присоединился к дискуссии).
Из версии 1.5 (согласно блогу Брэда) xUnit.Extensions имеет явную поддержку для этого через классыи TestClass
. Вот как это работает:
TestClass
имеет свойство Assert
, что имеет тип Assertions
который ретранслирует все методы на Xunit.Assert
. Поскольку TestClass.Assert
является экземпляром, вы можете добавить методы к нему через методы расширения на 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.
}
}
Теперь вы должны иметь тестовый класс, проистекают из Xunit.Extensions.TestClass
(Смутно, есть также Xunit.TestClass
, который не то, что вы хотите), а свойство Assert
будет «теневым» Xunit.Assert
, если вы не квалифицируете это имя явно.
В тестовом классе, производный от TestClass
, теперь вы можете использовать
Assert.DeepEquals(expectedXml, actualXml);
Единственное отличие от встроенного в XUnit утверждения (за исключением того, что синтаксис раскраски для Assert
является то, что в качестве идентификатора , а не тип) заключается в том, что когда он терпит неудачу, вы просто получаете TrueException
, а не конкретный DeepEqualsException
, который может гипотетически рассказать вам , где сравнение не удалось. Но, конечно, вы тоже могли бы построить это тоже.
Спасибо, что объясняет, почему я не мог получить утверждают продлить, как я хотел. Ваше решение в значительной степени связано с тем, что я закончил, но я назвал свой «SeleniumAssert.ElementPresent (...)»; – Neil
Для xUnit 2 ознакомьтесь с примерами, например https://github.com/xunit/samples.xunit /blob/master/AssertExtensions/StringAssertionExtensions.cs – Jedidja