Main Content

단위 테스트에 태그 지정하기

테스트 태그를 사용하여 여러 테스트를 범주별로 그룹화한 다음 지정된 태그를 사용해 테스트를 실행할 수 있습니다. 통상적인 테스트 태그는 특정 기능을 식별하거나 테스트 유형을 설명합니다.

테스트에 태그 지정하기

테스트 태그를 정의하려면 의미 있는 문자형 벡터로 구성된 셀형 배열 또는 string형 배열을 사용하십시오. 예를 들어, TestTags = {'Unit'} 또는 TestTags = ["Unit","FeatureA"]를 사용합니다.

  • 개별 테스트에 태그를 지정하려면 TestTags 메서드 특성(Attribute)을 사용하십시오.

  • 클래스 내의 모든 테스트에 태그를 지정하려면 TestTags 클래스 특성을 사용하십시오. 슈퍼클래스에서 TestTags 클래스 특성을 사용하는 경우 서브클래스의 테스트는 이 태그를 상속합니다.

다음 예제 테스트 클래스 ExampleTagTestTestTags 메서드 특성을 사용하여 개별 테스트에 태그를 지정합니다.

classdef ExampleTagTest < matlab.unittest.TestCase
    methods (Test)
        function testA (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'Unit'})
        function testB (testCase)
            % test code
        end
        function testC (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'Unit','FeatureA'})
        function testD (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'System','FeatureA'})
        function testE (testCase)
            % test code
        end
    end
end

클래스 ExampleTagTest의 몇몇 테스트는 태그가 지정되어 있습니다. 예를 들어, testD'Unit''FeatureA'로 태그가 지정되어 있습니다. 테스트 testA는 태그가 지정되어 있지 않습니다.

이 예제 테스트 클래스 ExampleTagClassTestTestTags 클래스 특성을 사용하여 클래스 내의 모든 테스트에 태그를 지정하고 TestTags 메서드 특성을 사용하여 개별 테스트에 태그를 추가합니다.

classdef (TestTags = {'FeatureB'}) ...
        ExampleTagClassTest < matlab.unittest.TestCase
    methods (Test)
        function testF (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'FeatureC','System'})
        function testG (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'System','FeatureA'})
        function testH (testCase)
            % test code
        end
    end
end

클래스 ExampleTagClassTest의 각각의 테스트는 'FeatureB'로 태그가 지정되어 있습니다. 또한, 개개의 테스트에는 'FeatureA', 'FeatureC', 'System' 등 다양한 태그가 지정되어 있습니다.

테스트 선택하고 실행하기

태그 지정된 테스트를 선택하고 실행하는 방법에는 세 가지가 있습니다.

runtests를 사용하여 선별된 테스트 실행하기

runtests 함수를 사용하면 명시적으로 테스트 스위트(Test Suite)를 만들지 않고도 테스트를 선택하고 실행할 수 있습니다. ExampleTagTestExampleTagClassTest에서 'FeatureA' 태그가 있는 모든 테스트를 선택하고 실행하십시오.

results = runtests({'ExampleTagTest','ExampleTagClassTest'},'Tag','FeatureA');
Running ExampleTagTest
..
Done ExampleTagTest
__________

Running ExampleTagClassTest
.
Done ExampleTagClassTest
__________

runtests가 세 개의 테스트를 선택하고 실행했습니다.

결과를 테이블에 표시하십시오.

table(results)
ans =

  3×6 table

               Name                Passed    Failed    Incomplete     Duration       Details   
    ___________________________    ______    ______    __________    __________    ____________

    'ExampleTagTest/testE'         true      false     false         0.00039529    [1×1 struct]
    'ExampleTagTest/testD'         true      false     false         0.00045658    [1×1 struct]
    'ExampleTagClassTest/testH'    true      false     false         0.00043899    [1×1 struct]

선택한 테스트는 ExampleTagTesttestEtestD, 그리고 ExampleTagClassTesttestH입니다.

TestSuite 메서드를 사용한 테스트 선택하기

ExampleTagTest 클래스에서 'FeatureA'로 태그 지정된 테스트 스위트(Test Suite)를 만드십시오.

import matlab.unittest.TestSuite
sA = TestSuite.fromClass(?ExampleTagTest,'Tag','FeatureA');

ExampleTagClassTest 클래스에서 'FeatureC'로 태그 지정된 테스트 스위트(Test Suite)를 만드십시오.

sB = TestSuite.fromFile('ExampleTagClassTest.m','Tag','FeatureC');

이 테스트 스위트를 결합하고 테스트의 이름을 확인하십시오.

suite = [sA sB];
{suite.Name}'
ans =

  3×1 cell array

    'ExampleTagTest/testE'
    'ExampleTagTest/testD'
    'ExampleTagClassTest/testG'

HasTag 선택기를 사용하여 테스트 선택하기

ExampleTagTest 클래스와 ExampleTagClassTest 클래스의 모든 테스트가 포함된 테스트 스위트를 만드십시오.

import matlab.unittest.selectors.HasTag
sA = TestSuite.fromClass(?ExampleTagTest);
sB = TestSuite.fromFile('ExampleTagClassTest.m');
suite = [sA sB];

태그가 없는 테스트를 모두 선택하십시오.

s1 =  suite.selectIf(~HasTag)
s1 = 

  Test with properties:

                  Name: 'ExampleTagTest/testA'
         ProcedureName: 'testA'
             TestClass: "ExampleTagTest"
            BaseFolder: 'C:\work'
      Parameterization: [0×0 matlab.unittest.parameters.EmptyParameter]
    SharedTestFixtures: [0×0 matlab.unittest.fixtures.EmptyFixture]
                  Tags: {1×0 cell}

Tests Include:
   0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.

'Unit' 태그가 있는 테스트를 모두 선택하여 테스트 이름을 표시하십시오.

s2 = suite.selectIf(HasTag('Unit'));
{s2.Name}'
ans =

  3×1 cell array

    'ExampleTagTest/testD'
    'ExampleTagTest/testB'
    'ExampleTagTest/testC'

제약 조건을 사용하여 'FeatureB' 태그나 'System' 태그가 있는 테스트를 모두 선택하십시오.

import matlab.unittest.constraints.IsEqualTo
constraint = IsEqualTo('FeatureB') | IsEqualTo('System');
s3 = suite.selectIf(HasTag(constraint));
{s3.Name}'
ans =

  4×1 cell array

    'ExampleTagTest/testE'
    'ExampleTagClassTest/testH'
    'ExampleTagClassTest/testG'
    'ExampleTagClassTest/testF'

참고 항목

| | | |