Main Content

ユニット テストのタグ付け

タグを使ってテストをカテゴリ別にグループ化し、指定したタグでテストを実行することができます。テスト タグは通常、特定機能の識別やテストの種類の説明に使われます。

テストのタグ付け

テスト タグを定義するには、有意文字ベクトルの cell 配列または string 配列を使用します。たとえば、TestTags = {'Unit'}TestTags = ["Unit","FeatureA"] などです。

  • 個別のテストをタグ付けするには、TestTags メソッド属性を使用します。

  • クラス内のすべてのテストをタグ付けするには、TestTags クラス属性を使用します。TestTags クラス属性をスーパークラスに使用すると、サブクラスのテストはタグを継承します。

このサンプル テスト クラス ExampleTagTest では、TestTags メソッド属性を使用して個別のテストをタグ付けしています。

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' というタグが付けられています。1 つのテスト、testA にはタグが付けられていません。

このサンプル テスト クラス ExampleTagClassTest では、TestTags クラス属性を使用してクラス内のすべてのテストにタグを付け、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' など様々なタグが付けられています。

テストの選択と実行

タグ付けされたテストを選択して実行する方法は 3 つあります。

runtests を使用した、選択されたテストの実行

関数 runtests を使用して、明示的にテスト スイートを作成せずにテストを選択して実行します。ExampleTagTest および ExampleTagClassTest から 'FeatureA' タグを含むすべてのテストを選択して実行します。

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

Running ExampleTagClassTest
.
Done ExampleTagClassTest
__________

runtests は 3 つのテストを選択して実行しました。

結果をテーブルに表示します。

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' タグの付いたテストでスイートを作成します。

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

ExampleTagClassTest クラスの 'FeatureC' タグの付いたテストでスイートを作成します。

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'

参考

| | | |