xUnit -如何在从dotnet test CLI执行时选择单个理论



假设我有一个测试:

[Theory]
[InlineData("one")]
[InlineData("two")]
public void ShouldSelectSingleTheoryFromDotnetTest(string s)
{
Assert.True(true);
}

我只想用Theory data = "one"执行测试从命令行使用dotnet test...。这可能吗?

我知道我们可以使用Traits来选择测试,但是我不知道如何将单个trait与每一行Theory数据关联起来。

作为一种变通方法,我想也许我可以使用动态跳过测试的技术,但是要做到这一点,我仍然需要从命令行读取一个参数,并且也不知道如何做到这一点。一种解决方法可能是在命令行上设置环境变量,然后使用动态跳过模式运行测试,其中动态跳过逻辑将读取命令行参数。但这是非常笨拙的。

可以使用dotnet test--filter参数

首先使用-t|--list-tests查看测试名称,然后您将得到如下内容:

dotnet test -t
The following Tests are available:
xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "one")
xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "two")

然后您可以使用此信息对DisplayName进行过滤。

无法找出如何转义名称中的双引号和括号,因此使用了"workaround"在FullyQualifiedNameDisplayName上合并过滤:

dotnet test --filter "FullyQualifiedName~ShouldSelectSingleTheoryFromDotnetTest&DisplayName~one"

输出如下:

通过了!-失败:0,通过:1,跳过:0,总数:1,持续时间:<1 ms - xUnitSkip.dll (net7.0)

与不带过滤器的相比:

通过了!-失败:0,通过:2,跳过:0,总数:2,持续时间:4ms - xUnitSkip.dll (net7.0)

乌利希期刊指南

能够找出双引号转义,因此可以使用参数名-将双引号替换为%22:

dotnet test --filter "DisplayName~s: %22one%22"

But for parentheses - no cigar ATM.

您可以使用XUnit Traits单独运行测试,即类似于

[Trait("Category", "one")]
[Theory]
[InlineData("one")]
public void ShouldSelectSingleTheoryFromDotnetTest(string s)
{
myTestImpl(s);
}
[Trait("Category", "two")]
[Theory]
[InlineData("two")]
public void ShouldSelectSingleTheoryFromDotnetTest(string s)
{
myTestImpl(s);
}
private void myTestImpl(string s)
{
Assert.True(true);
}

只运行"一个"的测试内联数据-dotnet test --filter Category=one和第二-dotnet test --filter Category=two

相关内容

  • 没有找到相关文章

最新更新