Executar testes de unidade selecionados

Com o comando dotnet test no .NET Core, use uma expressão de filtro para executar testes selecionados. Este artigo demonstra como filtrar testes. Os exemplos usam dotnet test. Se você estiver usando vstest.console.exe, substitua --filter por --testcasefilter:.

Sintaxe

dotnet test --filter <Expression>
  • A expressão está no formato <Property><Operator><Value>[|&<Expression>].

    Expressões podem ser unidas com operadores boolianos: | para booliano or, & para booliano and.

    Expressões podem ser colocadas entre parênteses. Por exemplo: (Name~MyClass) | (Name~MyClass2).

    Uma expressão sem nenhum operador é interpretada como uma contém na FullyQualifiedName propriedade. Por exemplo, dotnet test --filter xyz é o mesmo que dotnet test --filter FullyQualifiedName~xyz.

  • A propriedade é um atributo do Test Case. Por exemplo, as propriedades a seguir têm suporte nas estruturas populares de teste de unidade.

    Estrutura de teste Propriedades com suporte
    MSTest FullyQualifiedName
    Name
    ClassName
    Priority
    TestCategory
    xUnit FullyQualifiedName
    DisplayName
    Traits
    Nunit FullyQualifiedName
    Name
    Priority
    TestCategory
  • Operadores

    • = correspondência exata
    • !=sem correspondência exata
    • ~ contém
    • !~ não contém
  • Valor é uma cadeia de caracteres. As pesquisas não diferenciam maiúsculas de minúsculas.

Escape de caracteres

Para usar um ponto de exclamação (!) em uma expressão de filtro, você precisa escapar dela em alguns shells Linux ou macOS colocando uma barra invertida na frente dela (\!). Por exemplo, o filtro a seguir ignora todos os testes em um namespace que contém IntegrationTests:

dotnet test --filter FullyQualifiedName\!~IntegrationTests

Para valores FullyQualifiedName que incluem uma vírgula para parâmetros de tipo genérico, escape da vírgula com %2C. Por exemplo:

dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"

Exemplos de MSTest

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MSTestNamespace
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod, Priority(1), TestCategory("CategoryA")]
        public void TestMethod1()
        {
        }

        [TestMethod, Priority(2)]
        public void TestMethod2()
        {
        }
    }
}
Expressão Result
dotnet test --filter Method Executa testes cujo FullyQualifiedName contém Method.
dotnet test --filter Name~TestMethod1 Executa testes cujo nome contém TestMethod1.
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 Executa testes que estão na classe MSTestNamespace.UnitTest1.
Observação: o valor ClassName deve ter um namespace, portanto ClassName=UnitTest1 não funcionará.
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 Executa todos os testes, exceto MSTestNamespace.UnitTest1.TestMethod1.
dotnet test --filter TestCategory=CategoryA Executa testes que são anotados com [TestCategory("CategoryA")].
dotnet test --filter Priority=2 Executa testes que são anotados com [Priority(2)].

Exemplos usando os operadores condicionais | e &:

Exemplos de xUnit

using Xunit;

namespace XUnitNamespace
{
    public class TestClass1
    {
        [Fact, Trait("Priority", "1"), Trait("Category", "CategoryA")]
        public void Test1()
        {
        }

        [Fact, Trait("Priority", "2")]
        public void Test2()
        {
        }
    }
}
Expressão Result
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 Executa somente um teste, XUnitNamespace.TestClass1.Test1.
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 Executa todos os testes, exceto XUnitNamespace.TestClass1.Test1.
dotnet test --filter DisplayName~TestClass1 Executa testes cujo nome de exibição contém TestClass1.

No exemplo de código, as características definidas com chaves "Category" e "Priority" podem ser usadas para filtragem.

Expressão Result
dotnet test --filter XUnit Executa testes cujo FullyQualifiedName contém XUnit.
dotnet test --filter Category=CategoryA Executa testes que têm [Trait("Category", "CategoryA")].

Exemplos usando os operadores condicionais | e &:

  • Para executar testes que têm TestClass1 em seu FullyQualifiedNameouTrait têm uma chave de "Category" e um valor "CategoryA".

    dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
    
  • Para executar testes que têm TestClass1 em seu FullyQualifiedNameeTrait têm uma chave de "Category" e um valor "CategoryA".

    dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
    
  • Para executar testes que têm FullyQualifiedName contendo TestClass1e têm um Trait com uma chave "Category" e valor de "CategoryA"ou têm um Trait com uma chave de "Priority" e valor de 1.

    dotnet test --filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"
    

Exemplos de NUnit

using NUnit.Framework;

namespace NUnitNamespace
{
    public class UnitTest1
    {
        [Test, Property("Priority", 1), Category("CategoryA")]
        public void TestMethod1()
        {
        }

        [Test, Property("Priority", 2)]
        public void TestMethod2()
        {
        }
    }
}
Expressão Result
dotnet test --filter Method Executa testes cujo FullyQualifiedName contém Method.
dotnet test --filter Name~TestMethod1 Executa testes cujo nome contém TestMethod1.
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 Executa testes que estão na classe NUnitNamespace.UnitTest1.
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 Executa todos os testes, exceto NUnitNamespace.UnitTest1.TestMethod1.
dotnet test --filter TestCategory=CategoryA Executa testes que são anotados com [Category("CategoryA")].
dotnet test --filter Priority=2 Executa testes que são anotados com [Priority(2)].

Exemplos usando os operadores condicionais | e &:

Para executar testes que têm UnitTest1 em seu FullyQualifiedNameou têm um Category de "CategoryA".

dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Para executar testes que têm UnitTest1 em seu FullyQualifiedNamee têm um Category de "CategoryA".

dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"

Para executar testes que têm um FullyQualifiedName contendo UnitTest1e têm um Category de "CategoryA"ou têm um Property com um "Priority" de 1.

dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"

Para obter mais informações, consulte Filtro TestCase.

Confira também

Próximas etapas