ユニット テストのタグ付け
タグを使ってテストをカテゴリ別にグループ化し、指定したタグでテストを実行することができます。テスト タグは通常、特定機能の識別やテストの種類の説明に使われます。
テストのタグ付け
テスト タグを定義するには、有意文字ベクトルの 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]
選択されたテストは、ExampleTagTest
の testE
と testD
および ExampleTagClassTest
の testH
です。
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'
参考
matlab.unittest.constraints
| matlab.unittest.selectors.HasTag
| matlab.unittest.TestSuite
| runtests
| matlab.unittest.TestCase