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

时间:2018-01-15 12:06:37

标签: c# unit-testing xunit skip

我不熟悉自动化并使用框架,他们已经重命名/定制了xunit测试的Fact和Theory属性。好吧,他们只通过失败,我也想运行警告。所以我遇到了#34; Skip.If()"使用xunit.SkippableFact nuget包。这需要我将属性[SkippableFact]或[SkippableTheory]添加到单元测试中,以便用" skip.if()"显示警告。如果我没有,只是添加标准[事实] [理论],它会显示一个我不想要的红色故障。这些只是冒烟测试,所以如果测试无法运行,我可以收到警告。请参阅我之前的帖子,了解我为什么要使用xunit.SkippableFact。

Stopping a test in C# visual studio if no data exist with smoke test

所以我的问题是我希望能够使用重命名/自定义事实/理论属性知道使用[SkippableFact]或只是基于TraitAttribute或其他东西的普通[事实]。我已经尝试重做构造函数并查看XunitTestCaseDiscoverer,但是由于我的知识有限而没有成功。

第一个例子是我们如何利用事实重命名和自定义,如果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
    }

1 个答案:

答案 0 :(得分:0)

嘿,这就是我的所作所为:

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))]

其中OnlyWhenSomeServiceAvailableGuiCheck也从FactAttribute继承。

有点笨拙,但没关系