C# xUnit测试的多个不同事实属性或多个事实属性的替代品?

C# xUnit测试的多个不同事实属性或多个事实属性的替代品?,c#,unit-testing,xunit,skip,C#,Unit Testing,Xunit,Skip,我不熟悉自动化,并且正在使用一个框架,在这个框架中,他们为xunit测试重命名/定制了事实和理论属性。好吧,他们只通过了考试,我也想发出警告。所以我遇到了Skip.If和xunit.skipablefact nuget包。这需要我将属性[SkippableFact]或[SkippableTheory]添加到单元测试中,以便使用skip.if显示警告。如果我不这样做,只需添加标准[事实][理论],它会显示一个红色的失败,这是我不希望看到的。这些只是烟雾测试,所以如果测试无法运行,我可以接受警告。请

我不熟悉自动化,并且正在使用一个框架,在这个框架中,他们为xunit测试重命名/定制了事实和理论属性。好吧,他们只通过了考试,我也想发出警告。所以我遇到了Skip.If和xunit.skipablefact nuget包。这需要我将属性[SkippableFact]或[SkippableTheory]添加到单元测试中,以便使用skip.if显示警告。如果我不这样做,只需添加标准[事实][理论],它会显示一个红色的失败,这是我不希望看到的。这些只是烟雾测试,所以如果测试无法运行,我可以接受警告。请参阅我之前关于为什么要使用xunit.skipablefact的文章

所以我的问题是,我希望能够使用rename/customized Fact/Theory属性来知道如何使用[SkippableFact],或者仅仅是基于TraitatAttribute之类的简单的[Fact]。我已经尝试过重做构造函数并研究XUnitTestCaseDiscoveryr,但由于知识有限,没有成功

第一个例子是我们如何使用事实重命名和自定义,如果skip.if错误,它将抛出一个失败的测试。第二个是标准的xunit命名,它与第一个相同,并且也会抛出一个fail。第三个给了我想要的,这是一个警告,但我想以某种方式将[SkippableFact]合并到第一个中,因为您不能有多个事实/理论属性

提前谢谢

    [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
    }

嘿,我是这么做的:

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));
        }
    }
}
其中,仅HomeServiceAvailable和GuiCheck也继承自FactAttribute

有点笨重,但没关系

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