다음을 통해 공유


선택한 단위 테스트 실행

.NET Core에서 dotnet test 명령과 함께 필터 식을 사용하여 선택한 테스트를 실행할 수 있습니다. 이 문서에서는 테스트를 필터링하는 방법을 보여줍니다. 이 예제에서는 dotnet test를 사용합니다. vstest.console.exe를 사용하는 경우 --filter--testcasefilter:로 바꾸세요.

구문

dotnet test --filter <Expression>
  • <Property><Operator><Value>[|&<Expression>] 형식입니다.

    식은 부울 연산자(부울 or의 경우 |, 부울 and의 경우 &)와 조인할 수 있습니다.

    식은 괄호로 묶을 수 있습니다. 예: (Name~MyClass) | (Name~MyClass2)

    연산자가 없는 식은 FullyQualifiedName 속성에 대한 contains로 해석됩니다. 예를 들어 dotnet test --filter xyzdotnet test --filter FullyQualifiedName~xyz과 같습니다.

  • 속성Test Case의 특성입니다. 예를 들어 다음 속성은 인기 있는 단위 테스트 프레임워크에서 지원됩니다.

    테스트 프레임워크 지원되는 속성
    MSTest FullyQualifiedName
    Name
    ClassName
    Priority
    TestCategory
    xUnit FullyQualifiedName
    DisplayName
    Traits
    Nunit FullyQualifiedName
    Name
    Priority
    TestCategory
  • 연산자

    • = 정확히 일치
    • != 정확하게 일치하지 않음
    • ~ 포함
    • !~ 포함 안 함
  • 은 문자열입니다. 모든 조회는 대/소문자를 구분합니다.

문자 이스케이프

필터 식에서 느낌표(!)를 사용하려면 일부 Linux 또는 macOS 셸에서 앞에 백슬래시(\!)를 넣어 이스케이프해야 합니다. 예를 들어 다음 필터는 IntegrationTests를 포함하는 네임스페이스의 모든 테스트를 건너뜁니다.

dotnet test --filter FullyQualifiedName\!~IntegrationTests

제네릭 형식 매개 변수의 쉼표를 포함하는 FullyQualifiedName 값의 경우 %2C를 사용하여 쉼표를 이스케이프합니다. 예시:

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

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()
        {
        }
    }
}
결과
dotnet test --filter Method FullyQualifiedNameMethod가 포함된 테스트를 실행합니다.
dotnet test --filter Name~TestMethod1 이름에 TestMethod1이 포함된 테스트를 실행합니다.
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 MSTestNamespace.UnitTest1 클래스에 있는 테스트를 실행합니다.
참고:ClassName 값에는 네임스페이스가 있어야 하므로, ClassName=UnitTest1이 작동하지 않습니다.
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 MSTestNamespace.UnitTest1.TestMethod1을 제외한 모든 테스트를 실행합니다.
dotnet test --filter TestCategory=CategoryA [TestCategory("CategoryA")]로 주석이 달린 테스트를 실행합니다.
dotnet test --filter Priority=2 [Priority(2)]로 주석이 달린 테스트를 실행합니다.

조건부 연산자 |&를 사용하는 예는 다음과 같습니다.

  • FullyQualifiedNameUnitTest1가 포함되거나 또는 TestCategoryAttribute"CategoryA"인 테스트를 실행하는 경우.

    dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
    
  • FullyQualifiedNameUnitTest1이 포함되면서 TestCategoryAttribute"CategoryA"인 테스트를 실행하는 경우.

    dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
    
  • FullyQualifiedNameUnitTest1이 포함되면서 TestCategoryAttribute"CategoryA"이거나, 또는 PriorityAttribute의 우선 순위가 1인 테스트를 실행하는 경우.

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

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()
        {
        }
    }
}
결과
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 XUnitNamespace.TestClass1.Test1 테스트를 하나만 실행합니다.
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 XUnitNamespace.TestClass1.Test1을 제외한 모든 테스트를 실행합니다.
dotnet test --filter DisplayName~TestClass1 표시 이름에 TestClass1이 포함된 테스트를 실행합니다.

코드 예제에서 "Category""Priority" 키로 정의된 특성은 필터링에 사용할 수 있습니다.

결과
dotnet test --filter XUnit FullyQualifiedNameXUnit가 포함된 테스트를 실행합니다.
dotnet test --filter Category=CategoryA [Trait("Category", "CategoryA")]가 있는 테스트를 실행합니다.

조건부 연산자 |&를 사용하는 예는 다음과 같습니다.

  • FullyQualifiedNameTestClass1이 포함되거나 또는 "Category" 키의 값이 "CategoryA"Trait가 있는 테스트를 실행하는 경우.

    dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
    
  • FullyQualifiedNameTestClass1이 포함되면서 "Category" 키의 값이 "CategoryA"Trait가 있는 테스트를 실행하는 경우.

    dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
    
  • FullyQualifiedNameTestClass1이 포함되면서 "Category" 키의 값이 "CategoryA"Trait가 있거나, 또는 "Priority" 키의 값이 1Trait가 있는 테스트를 실행하는 경우.

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

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()
        {
        }
    }
}
결과
dotnet test --filter Method FullyQualifiedNameMethod가 포함된 테스트를 실행합니다.
dotnet test --filter Name~TestMethod1 이름에 TestMethod1이 포함된 테스트를 실행합니다.
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 NUnitNamespace.UnitTest1 클래스에 있는 테스트를 실행합니다.
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 NUnitNamespace.UnitTest1.TestMethod1을 제외한 모든 테스트를 실행합니다.
dotnet test --filter TestCategory=CategoryA [Category("CategoryA")]로 주석이 달린 테스트를 실행합니다.
dotnet test --filter Priority=2 [Priority(2)]로 주석이 달린 테스트를 실행합니다.

조건부 연산자 |&를 사용하는 예는 다음과 같습니다.

FullyQualifiedNameUnitTest1이 포함되거나 또는 Category"CategoryA"인 테스트를 실행하는 경우.

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

FullyQualifiedNameUnitTest1이 포함되면서 Category"CategoryA"인 테스트를 실행하는 경우.

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

FullyQualifiedNameUnitTest1이 포함되면서 Category"CategoryA"이거나, 또는 "Priority"의 값이 1Property가 있는 테스트를 실행하는 경우.

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

자세한 내용은 TestCase 필터를 참조하세요.

참고 항목

다음 단계