Есть ли какие-либо средства в структуре xUnit.net, аналогичные следующим функциям NUnit?
[Test, TestCaseSource("CurrencySamples")]
public void Format_Currency(decimal value, string expected){}
static object[][] CurrencySamples = new object[][]
{
new object[]{ 0m, "0,00"},
new object[]{ 0.0004m, "0,00"},
new object[]{ 5m, "5,00"},
new object[]{ 5.1m, "5,10"},
new object[]{ 5.12m, "5,12"},
new object[]{ 5.1234m, "5,12"},
new object[]{ 5.1250m, "5,13"}, // round
new object[]{ 5.1299m, "5,13"}, // round
}
Это сгенерирует 8 отдельных тестов в графическом интерфейсе NUnit.
[TestCase((string)null, Result = "1")]
[TestCase("", Result = "1")]
[TestCase(" ", Result = "1")]
[TestCase("1", Result = "2")]
[TestCase(" 1 ", Result = "2")]
public string IncrementDocNumber(string lastNum) { return "some"; }
Это сгенерирует 5 отдельных тестов и автоматически сравнит результаты ( Assert.Equal()
).
[Test]
public void StateTest(
[Values(1, 10)]
int input,
[Values(State.Initial, State.Rejected, State.Stopped)]
DocumentType docType
){}
Это сгенерирует 6 комбинаторных тестов. Бесценно.
Несколько лет назад я попробовал xUnit, и он мне понравился, но в нем не было этих функций. Не могу без них жить. Что-то изменилось?
Ответы:
xUnit предлагает способ запускать параметризованные тесты с помощью так называемых теорий данных . Эта концепция эквивалентна той, что есть в NUnit, но функциональность, которую вы получаете из коробки, не так полна.
Вот пример:
В этом примере xUnit будет запускать
Should_format_the_currency_value_correctly
тест один разInlineDataAttribute
каждый раз, передавая указанное значение в качестве аргумента.Теории данных - это точка расширения, которую вы можете использовать для создания новых способов запуска параметризованных тестов. Это делается путем создания новых атрибутов, которые проверяют и, при необходимости, воздействуют на аргументы и возвращаемое значение методов тестирования.
Вы можете найти хороший практический пример того , как теории данных XUnit может быть расширены в AutoFixture «s Autodata и InlineAutoData теорий.
источник
[Theory]
атрибут недоступен.Позвольте мне бросить сюда еще один образец, на всякий случай, если он кому-то сэкономит время.
источник
По первому запросу вы можете следовать приведенным здесь примерам .
Вы можете создать статический класс, содержащий данные, необходимые для набора тестов.
Затем с помощью атрибута MemberData определите тест как таковой.
или если вы используете C # 6.0,
Первый аргумент MemberDataAttribute позволяет вам определить элемент, который вы используете в качестве источника данных, так что у вас есть достаточная гибкость при повторном использовании.
источник
Согласно этой статье в xUnit у вас есть три варианта «параметризации»:
Пример InlineData
Пример ClassData
Пример MemberData
источник
Я нашел библиотеку Xunit.Combinatorial, которая обеспечивает эквивалентную функциональность
[Values]
атрибуту NUnit :Он позволяет вам указывать значения на уровне параметров:
Или вы можете неявно вычислить минимальное количество вызовов, чтобы охватить все возможные комбинации:
источник
Я учел все ответы здесь и дополнительно использовал
TheoryData<,>
общие типы XUnit, чтобы дать мне простые, легкие для чтения и безопасные для ввода определения данных для атрибута 'MemberData' в моем тесте, как показано в этом примере:NB Использование VS2017 (15.3.3), C # 7 и XUnit 2.2.0 для .NET Core
источник