2015-08-18 3 views
0

При использовании xUnit один и тот же пробный запуск может выполняться несколько раз с разными данными, используя атрибут InlineData.Пусть xUnit компилирует параметры

[Theory] 
    [InlineData("A", 1)] 
    [InlineData("B", 2)] 
    public void TestAllValues(string x, int y) 

Я хочу объединить эти параметры во всех возможных комбинациях. Я мог бы написать это, как следует.

[Theory] 
    [InlineData("A", 1)] 
    [InlineData("A", 2)] 
    [InlineData("A", 3)] 
    [InlineData("B", 1)] 
    [InlineData("B", 2)] 
    [InlineData("B", 3)] 
    public void TestAllValues(string x, int y) 

В моем случае мне нужно проверить намного больше комбинаций, позволяет сказать, что для каждой буквы алфавита, а также для каждого числа от одного до 100. Я хотел бы написать что-то вроде

[Theory] 
    [InlineData("A-Z", 1..100)] 
    public void TestAllValues(string x, int y) 

Or любой эквивалент, который не требует 2.600 строк. Пример составлен для простоты, но мне действительно нужно много дел для тестирования.

В качестве бонусного вопроса. Могу ли я отразить комбинацию во имя теста?

ответ

3

Оказывается, что есть что-то, называемое атрибутом MemberData.

[MemberData("AllCombinations")]   
public void TestAllValues(string x, int y) 
{ 

Где вы можете сгенерировать все желаемые комбинации.

public static IEnumerable<object[]>AllCombinations{ 
    get 
    { 
     foreach(var c in generateCombinations()){ 
      yield return new object [] { c.Letter, c.Number} // 
     } 
    } 
Смежные вопросы