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

问题描述 投票:0回答:2

假设我有一个测试:

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

我想使用

dotnet test...
从命令行执行理论数据=“一”的测试。这可能吗?

我知道我们可以使用特征选择测试,但我不知道如何将单个特征与理论数据的每一行关联起来。

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

.net testing traits xunit dotnet-test
2个回答
2
投票
--filter

dotnet test
参数。
首先使用

-t|--list-tests

查看测试名称,然后你会得到类似:

dotnet test -t

The following Tests are available:
    xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "one")
    xUnitSkip.UnitTest1.ShouldSelectSingleTheoryFromDotnetTest(s: "two")
然后您可以使用此信息来过滤 
DisplayName

无法弄清楚如何转义名称中的双引号和括号,因此使用“解决方法”来组合对 

FullyQualifiedName

DisplayName
进行过滤:
dotnet test --filter "FullyQualifiedName~ShouldSelectSingleTheoryFromDotnetTest&DisplayName~one"

这给了我以下输出:

通过了! - 失败:0,通过:1,跳过:0,总计:1,持续时间:

< 1 ms - xUnitSkip.dll (net7.0)

与不带过滤器的相比:

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

UPD

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

%22

:

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

UPD2

@Jan Zakrzewski 提供

可以使用

\(

\)
转义括号。
这使得完整的过滤器如下所示:

dotnet test --filter "DisplayName=xUnitSkip.UnitTest1.AnotherDummyTest.ShouldSelectSingleTheoryFromDotnetTest\(s: %22two%22\)"



0
投票
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
    

© www.soinside.com 2019 - 2024. All rights reserved.