K S*_*K S 6 .net testing xunit traits dotnet-test
假设我有一个测试:
[Theory]
[InlineData("one")]
[InlineData("two")]
public void ShouldSelectSingleTheoryFromDotnetTest(string s)
{
Assert.True(true);
}
Run Code Online (Sandbox Code Playgroud)
我想仅使用 Theory data = "one" 从命令行执行测试dotnet test...。这可能吗?
我知道我们可以使用特征选择测试,但我不知道如何将单个特征与理论数据的每一行关联起来。
作为一种解决方法,我想也许我可以使用动态跳过测试的技术,但仍然要做到这一点,我需要从命令行读取参数,并且也不知道如何做到这一点。一种解决方法可能是在命令行上设置环境变量,然后使用动态跳过模式运行测试,其中动态跳过逻辑将读取命令行参数。但这非常笨拙。
您可以使用--filter的参数dotnet test。
首先使用-t|--list-tests查看测试名称,然后你会得到类似的内容:
dotnet test -t
Run Code Online (Sandbox Code Playgroud)
The following Tests are available:
xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "one")
xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "two")
Run Code Online (Sandbox Code Playgroud)
然后您可以使用此信息来过滤DisplayName.
无法弄清楚如何转义名称中的双引号和括号,因此使用“解决方法”来组合对FullyQualifiedName和进行过滤DisplayName:
The following Tests are available:
xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "one")
xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "two")
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
通过了!- 失败:0,通过:1,跳过:0,总计:1,持续时间:< 1 毫秒 - xUnitSkip.dll (net7.0)
与不带过滤器的相比:
通过了!- 失败:0,通过:2,跳过:0,总计:2,持续时间:4 毫秒 - xUnitSkip.dll (net7.0)
UPD
能够找出双引号转义,因此可以使用参数名称 - 将双引号替换为%22:
dotnet test --filter "FullyQualifiedName~ShouldSelectSingleTheoryFromDotnetTest&DisplayName~one"
Run Code Online (Sandbox Code Playgroud)
UPD2
可以使用\ie\(和转义括号\)。
这使得完整的过滤器如下所示:
dotnet test --filter "DisplayName=xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest\(s: %22two%22\)"
Run Code Online (Sandbox Code Playgroud)