#c# #xunit
Вопрос:
Есть ли способ ввести данные в [InlineData]
значения для тестов xUnit? Кажется, я не могу этого сделать, так как для этого требуются константы.
Комментарии:
1.
[ClassData]
или[MemberData]
?2. Теория xUnit: Работа С Линейными Данными, Данными участников, Данными классов
Ответ №1:
Для вызова методов в качестве данных вы должны использовать [MemberData]
, а не [InlineData]
. В MemberData вы можете указать функцию via nameof
, которая возвращает ожидаемые параметры в качестве результата.
public static IEnumerable<object[]> GetNumbers()
{
yield return new object[] { 5, 1, 3, 9 };
yield return new object[] { 7, 1, 5, 3 };
}
[Theory]
[MemberData(nameof(GetNumbers))]
public void AllNumbers_AreOdd_WithMemberData(int a, int b, int c, int d)
{
Assert.True(IsOddNumber(a));
Assert.True(IsOddNumber(b));
Assert.True(IsOddNumber(c));
Assert.True(IsOddNumber(d));
}
Я не уверен, но если я правильно помню, функция , которую вы вызываете, должна возвращать IEnumerable<object[]>
, которую xUnit будет сортировать по параметрам теста, и вы должны использовать yield return
, если хотите использовать несколько наборов данных.