如何使用"dotnet test"按类别过滤NUnit测试

Dej*_*jan 9 c# nunit .net-core dotnet-cli

我有一个项目有一个

[TestFixture, Category("Oracle")]
Run Code Online (Sandbox Code Playgroud)

和a

[TestFixture, Category("OracleOdbc")]
Run Code Online (Sandbox Code Playgroud)

一对夫妇的测试,我想执行分开使用dotnet test.

这是我在一些谷歌搜索后尝试的:

  1. dotnet test MyProject.csproj --where "cat==Oracle" 但是这个开关不再存在了.
  2. dotnet test MyProject.csproj --filter Category="Oracle"产生0适用的测试:No test is available in ....

然后,我偶然发现了这篇文章,虽然它描述了MSTest(和NUnit有CategoryAttribute而不是a TestCategoryAttribute),我试过了

  1. dotnet test MyProject.csproj --filter TestCategory="Oracle"

答对了.这次所有"Oracle"测试都已执行.但现在是令人困惑的部分.如果我运行dotnet test MyProject.csproj --filter TestCategory="OracleOdbc",所有测试都在执行,包括"Oracle" "OracleOdbc".这让我想知道是否TestCategroy是NUnit的正确方法,或者这是一个错误.

我正在使用.NET命令行工具(2.1.2),项目参考是:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="NUnit" Version="3.8.1" />
<PackageReference Include="NUnit3TestAdapter" Version="3.9.0" />
<PackageReference Include="TeamCity.VSTest.TestAdapter" Version="1.0.7" />
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我不知道这是否重要,但我的测试项目是多目标netcoreapp2.0net462.

Dou*_*ugh 7

这可能不是很有帮助,但是似乎对我来说是正确的。我使用dotnet-cli创建了项目。

首先,我从这里安装了NUnit3测试适配器说明。这仅需要在每台计算机上运行一次,因此如果您已经在运行它,则无需再次执行此操作。

dotnet new -i NUnit3.DotNetNew.Template
Run Code Online (Sandbox Code Playgroud)

然后,我创建了解决方案,创建了测试项目,并将测试项目添加到了解决方案中。

dotnet new sln -n Solution
dotnet new nunit -n TestProject -o tests\TestProject
dotnet sln add tests\TestProject\TestProject.csproj
Run Code Online (Sandbox Code Playgroud)

然后,我更新了UnitTest1.cs以包括两个测试装置,一个具有类别Oracle,一个具有类别OracleOdbc

using NUnit.Framework;

namespace Tests
{
    [TestFixture]
    [Category("Oracle")]
    public class OracleTests
    {
        [Test]
        public void OracleTest()
        {
            Assert.Fail();
        }
    }

    [TestFixture]
    [Category("OracleOdbc")]
    public class OracleOdbcTests
    {
        [Test]
        public void OracleOdbcTest()
        {
            Assert.Fail();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我可以指定选择运行的类别。

dotnet test tests/TestProject/TestProject.csproj --filter TestCategory="Oracle"
Run Code Online (Sandbox Code Playgroud)

要么

dotnet test tests/TestProject/TestProject.csproj --filter TestCategory="OracleOdbc"
Run Code Online (Sandbox Code Playgroud)

两者都只运行一个测试,并且消息显示它是正确的测试,但失败了。

使用DotNet-Cli版本2.1.4和NUnit3TestAdapter版本3.9.0

  • 如何指定多个TestCategory?是否可以将 Oracle 和 OracleOdbc 结合起来?dotnet test --no-build --filter "TestCategory=Oracle&amp;TestCategory=OracleOdbc" GherkinSuites.csproj (5认同)