Несколько различных атрибутов фактов для теста xUnit или альтернатива нескольким атрибутам фактов?

Я новичок в автоматизации и работаю с фреймворком, в котором они переименовали / настроили атрибуты Fact и Theory для теста xunit. Ну, они только Pass не работают, и я тоже хотел запустить Предупреждение. Итак, я наткнулся на «Skip.If ()» с пакетом nuget xunit.SkippableFact. Для этого мне необходимо добавить атрибут [SkippableFact] или [SkippableTheory] в модульный тест, чтобы предупреждение отображалось с помощью «skip.if ()». Если я этого не сделаю, а просто добавлю стандартный [Факт] [Теория], он отобразит красный сбой, который мне не нужен. Это просто дымовой тест, поэтому я не возражаю против предупреждения, если тест не может быть запущен. См. Мой предыдущий пост о том, почему я хотел использовать xunit.SkippableFact.

Остановка теста в Visual Studio C # при отсутствии данных с помощью дымового теста

Итак, моя проблема в том, что я хочу иметь возможность использовать переименованный / настраиваемый атрибут Fact / Theory, чтобы знать, использовать ли [SkippableFact] или просто [Fact], основанный на TraitAttribute или что-то в этом роде. Я попытался переделать конструктор и заглянуть в XunitTestCaseDiscoverer, но безуспешно с моими ограниченными знаниями.

Первый пример - это то, как мы использовали переименование и настройку Fact, что приводит к провалу теста, если skip.if неверен. Второе - это стандартное именование xunit, которое делает то же самое, что и первое, но тоже вызывает сбой. Третье дает мне то, что я хочу, что является предупреждением, но я хочу каким-то образом включить [SkippableFact] в первый, поскольку у вас не может быть нескольких атрибутов Fact / Theory.

Заранее спасибо.

    [UI, Scenario("Example"), Tags(TestScope.Smoke,TestScope.Skippable, Priority.One)]
    [Evaluate("Example")]
    public async Task ExampleTest()
    {
      skip.if(Data=0,"No Data to run smoke test"//This throws failed result 
      //for test
    }

    [Fact]
    public async Task ExampleTest()
    {
      skip.if(Data=0,"No Data to run smoke test"//This throws failed result 
      //for test
    }

    [SkippableFact]
    public async Task ExampleTest()
    {
       skip.if(Data=0,"No Data to run smoke test"//This throws warning 
       //result for test which is what I want
    }

person rowdog_14    schedule 15.01.2018    source источник


Ответы (1)


Привет, вот что я сделал:

public class MultiFact : FactAttribute
{
    public MultiFact(params Type[] types)
    {
        var result = types.Select(Activator.CreateInstance).Cast<FactAttribute>().ToList();

        if (result.Any(it => Text.IsNotBlank(it.Skip)))
        {
            Skip = string.Join(", ", result.Where(it => Text.IsNotBlank(it.Skip)).Select(it => it.Skip));
        }
    }
}

с использованием типа:

[MultiFact(typeof(OnlyWhenSomeServiceAvailable), typeof(GuiCheck))]

где OnlyWhenSomeServiceAvailable и GuiCheck также наследуются от FactAttribute.

немного неуклюже, но все в порядке

person Ben Biddington    schedule 22.03.2018