Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

selectIf

クラス: matlab.unittest.TestSuite
パッケージ: matlab.unittest

条件を満たすテスト スイートの要素の選択

説明

newsuite = selectIf(suite,s) は、セレクター s で指定された条件を満たすテスト要素を suite から選択し、配列 TestSuitenewsuite に返します。

newsuite = selectIf(suite,Name,Value) は、配列 TestSuite を、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使って作成します。

入力引数

suite

一連のテスト。matlab.unittest.TestSuite 配列として指定します。

s

matlab.unittest.selector パッケージのクラスのインスタンスとして指定されるセレクター。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

BaseFolder

テストを定義するファイルを含むフォルダーの名前。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。この引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素が BaseFolder によって指定されたベース フォルダーの 1 つに含まれていなければなりません。Test 要素がいずれもベース フォルダーと一致しない場合、空のテスト スイートが返されます。ワイルドカード文字 * を使用すると、任意の数の文字と一致します。疑問符 ? を使用すると単一の文字と一致します。

Name

スイート要素名。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。この引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素の Name プロパティが Name によって指定された名前の 1 つと一致しなければなりません。Test 要素がいずれも一致する名前をもたない場合、空のテスト スイートが返されます。ワイルドカード文字 * を使用すると、任意の数の文字と一致します。疑問符 ? を使用すると単一の文字と一致します。

ParameterProperty

テスト スイート要素で使用されるパラメーターを定義するテスト クラス プロパティの名前。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。この引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素の Parameterization プロパティに、ParameterProperty で指定されたプロパティ名が少なくとも 1 つ含まれていなければなりません。Test 要素がいずれも一致するプロパティ名をもたない場合、空のテスト スイートが返されます。ワイルドカード文字 * を使用すると、任意の数の文字と一致します。疑問符 ? を使用すると、単一の文字と一致します。

ParameterName

テスト スイート要素で使用されるパラメーターの名前。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。MATLAB® は、パラメーターを定義するテスト クラス プロパティに基づいてパラメーター名を生成します。

  • プロパティ値が文字ベクトルの cell 配列である場合、MATLAB は、cell 配列の値からパラメーター名を生成します。それ以外の場合、MATLAB はパラメーター名を value1value2、…、valueN として指定します。

  • プロパティ値が構造体である場合、MATLAB はパラメーター名を構造体フィールドから生成します。

ParameterName 引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素の Parameterization プロパティに、ParameterName によって指定されたパラメーター名が少なくとも 1 つ含まれていなければなりません。Test 要素がいずれも一致するパラメーター名をもたない場合、空のテスト スイートが返されます。ワイルドカード文字 * を使用すると、任意の数の文字と一致します。疑問符 ? を使用すると単一の文字と一致します。

ProcedureName

テスト プロシージャの名前。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。この引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素の ProcedureName プロパティが ProcedureName によって指定されたプロシージャ名の 1 つと一致しなければなりません。Test 要素がいずれも一致するプロシージャ名をもたない場合、空のテスト スイートが返されます。ワイルドカード文字 * を使用すると、任意の数の文字と一致します。疑問符 ? を使用すると単一の文字と一致します。

クラスベースのテストでは、ProcedureName はテスト メソッドの名前です。関数ベースのテストでは、テストを含むローカル関数の名前です。スクリプトベースのテストでは、テスト セクション タイトルから生成された名前です。Name とは異なり、テスト プロシージャの名前には、クラスやパッケージの名前およびパラメーター化に関する情報は含まれません。

Superclass

テスト クラスの派生元であるクラスの名前。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。この引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素の TestClass プロパティが Superclass によって指定されたクラスの 1 つから派生するテスト クラスを指していなければなりません。Test 要素がいずれもクラスに一致しない場合、空のテスト スイートが返されます。

Tag

テスト スイート要素で使用されるテスト タグの名前。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。この引数は、配列 TestSuite の要素をフィルター処理します。テスト フレームワークがスイートにテストを含めるためには、Test 要素の Tags プロパティに、Tag によって指定されたタグ名が少なくとも 1 つ含まれていなければなりません。Test 要素がいずれも一致するタグ名をもたない場合、空のテスト スイートが返されます。ワイルドカード文字 * を使用すると、任意の数の文字と一致します。疑問符 ? を使用すると単一の文字と一致します。

すべて展開する

作業フォルダーに、以下のテスト クラスを含むファイル ExampleTest.m を作成します。

classdef (SharedTestFixtures={...
        matlab.unittest.fixtures.PathFixture(fullfile(...
        matlabroot, 'help', 'techdoc', 'matlab_oop', 'examples'))})...
        ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testPathAdd(testCase)
            % test code
        end
        function testOne(testCase)
            % test code
        end
         function testTwo(testCase)
            % test code
        end
    end
end

コマンド プロンプトで ExampleTest クラスからテスト スイートを作成します。

import matlab.unittest.TestSuite;
import matlab.unittest.selectors.HasSharedTestFixture;
import matlab.unittest.selectors.HasName;
import matlab.unittest.fixtures.PathFixture;
import matlab.unittest.constraints.EndsWithSubstring;
import matlab.unittest.constraints.ContainsSubstring;

suite = TestSuite.fromClass(?ExampleTest)
suite = 

  1×3 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

Tests Include:
   0 Parameterizations, 1 Unique Shared Test Fixture Class, 0 Tags.

テスト スイートには、3 つのテスト要素が含まれます。

大文字と小文字を区別しないテキスト 'pAtH' を含む名前をもつテストで構成される、フィルター処理されたテスト スイートを作成します。

newSuite = selectIf(suite,HasName(ContainsSubstring('pAtH','IgnoringCase',true)))
newSuite = 

  Test with properties:

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

Tests Include:
   0 Parameterizations, 1 Unique Shared Test Fixture Class, 0 Tags.

testPathAdd テストのみがスイートの一部になります。

または、名前と値のペアを使用して同じスイートを作成します。

newSuite = selectIf(suite,'Name','*Path*');

しかし、ContainsSubstring 制約とは違い、名前と値のペアには大文字と小文字の区別を無視するオプションがありません。

共有パス フィクスチャを使用し名前が 'One' で終わらないテストで構成される、フィルター処理されたテスト スイートを作成します。

newSuite = suite.selectIf(~HasName(EndsWithSubstring('One')) ...
    & HasSharedTestFixture(PathFixture(fullfile(matlabroot, 'help',...
    'techdoc', 'matlab_oop', 'examples'))));
{newSuite.Name}
ans = 

    'ExampleTest/testPathAdd'    'ExampleTest/testTwo'

テスト スイートには 2 つのテストが含まれます。すべてのテストでは指定されたパス フィクスチャを使用しますが、'testOne' という名前のテストはスイートから除外されます。

作業フォルダーで testZeros.m を作成します。このクラスには 4 つのテスト メソッドが含まれます。

classdef testZeros < matlab.unittest.TestCase
    properties (TestParameter)
        type = {'single','double','uint16'};
        outSize = struct('s2d',[3 3], 's3d',[2 5 4]);
    end
    
    methods (Test)
        function testClass(testCase, type, outSize)
            testCase.verifyClass(zeros(outSize,type), type);
        end
        
        function testSize(testCase, outSize)
            testCase.verifySize(zeros(outSize), outSize);
        end
        
        function testDefaultClass(testCase)
            testCase.verifyClass(zeros, 'double');
        end
        function testDefaultSize(testCase)
            testCase.verifySize(zeros, [1 1]);
        end
        
        function testDefaultValue(testCase)
            testCase.verifyEqual(zeros,0);
        end
    end
end

テスト クラスには、2 つのパラメーター化されたテスト メソッド testClasstestSize があります。

コマンド プロンプトで、ファイルからテスト スイートを作成します。

s = matlab.unittest.TestSuite.fromFile('testZeros.m');
{s.Name}'
ans =

  11×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=single,outSize=s3d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s3d)'}
    {'testZeros/testSize(outSize=s2d)'             }
    {'testZeros/testSize(outSize=s3d)'             }
    {'testZeros/testDefaultClass'                  }
    {'testZeros/testDefaultSize'                   }
    {'testZeros/testDefaultValue'                  }

スイートには 11 個のテスト要素が含まれます。パラメーター化された testClass メソッドから 6 つ、パラメーター化された testSize メソッドから 2 つ、testDefaultClass メソッド、testDefaultSize メソッドおよび testDefaultValue メソッドから 1 つずつです。

パラメーター化されたテスト メソッドからすべてのテスト要素を選択します。

import matlab.unittest.selectors.HasParameter;

s1 = s.selectIf(HasParameter);
{s1.Name}'
ans =

  8×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=single,outSize=s3d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s3d)'}
    {'testZeros/testSize(outSize=s2d)'             }
    {'testZeros/testSize(outSize=s3d)'             }

スイートには 2 つのパラメーター化されたテスト メソッドからの 8 つのテスト要素が含まれます。

パラメーター化されていないテスト メソッドからすべてのテスト要素を選択します。

s2 = s.selectIf(~HasParameter);
{s2.Name}'
ans =

  3×1 cell array

    {'testZeros/testDefaultClass'}
    {'testZeros/testDefaultSize' }
    {'testZeros/testDefaultValue'}

パラメーター名が 'double''type' という名前のプロパティをもつ、パラメーター化されたテスト要素をすべて選択します。

s3 = s.selectIf('ParameterProperty','type', 'ParameterName','double');
{s3.Name}'
ans =

  2×1 cell array

    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}

結果のスイートには 2 要素が含まれます。testClass メソッドは、'type' プロパティを使用する testZeros 内の唯一のメソッドで、パラメーターから 'double' のみを選択することで、テスト要素が 2 つ ('outSize' の各値で 1 つ) になります。

パラメーター化され、't' で始まるプロパティによって定義されるパラメーターをもつすべてのテスト要素を選択します。

s4 = s.selectIf('ParameterProperty','t*');
{s4.Name}'
ans =

  6×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=single,outSize=s3d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s3d)'}

結果のスイートには testClass メソッドからの 6 つのパラメーター化されたテスト要素が含まれます。testSize メソッドはパラメーター化されていますが、このメソッドは 't' で始まるプロパティを使用しないため、その要素はスイートには含まれません。

パラメーター化されたテスト要素をすべて選択し、2-D 配列で関数 zeros をテストします。2-D 配列を表すパラメーター値の長さは、1 (zeros(3) など) または 2 (zeros(2,3) など) になります。

import matlab.unittest.constraints.HasLength;

s5 = s.selectIf(HasParameter('Property','outSize',...
    'Value', HasLength(1)|HasLength(2)));
{s5.Name}'
ans =

  4×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testSize(outSize=s2d)'             }

出力が double データ型で、2-D 配列に適切なサイズであることをテストするテスト要素のみ選択します。

s6 = s.selectIf(HasParameter('Property','type','Name','double')...
    & HasParameter('Property','outSize','Name','s2d'))
s6 = 

  Test with properties:

                  Name: 'testZeros/testClass(type=double,outSize=s2d)'
         ProcedureName: 'testClass'
             TestClass: "testZeros"
            BaseFolder: 'C:\work'
      Parameterization: [1×2 matlab.unittest.parameters.TestParameter]
    SharedTestFixtures: [0×0 matlab.unittest.fixtures.EmptyFixture]
                  Tags: {1×0 cell}

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

現在のフォルダー内のファイル ExampleTest.m に次のテスト クラスを作成します。

classdef ExampleTest < 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

コマンド プロンプトで ExampleTest クラスからテスト スイートを作成して、その内容を確認します。

import matlab.unittest.TestSuite
import matlab.unittest.selectors.HasTag

suite = TestSuite.fromClass(?ExampleTest)
suite = 

  1×5 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

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

3 Unique Tags のハイパーリンクをクリックして、スイートに含まれるすべてのタグを表示します。

        Tag     
    ____________

    {'FeatureA'}
    {'System'  }
    {'Unit'    }   

'Unit' というタグをもつテスト スイート要素をすべて選択します。

s1 = suite.selectIf(HasTag('Unit'))
s1 = 

  1×3 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

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

'FeatureA' というタグを含まないすべてのテスト スイート要素を選択します。

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

  1×3 cell array

    {'ExampleTest/testB'}    {'ExampleTest/testC'}    {'ExampleTest/testA'}

タグが付いていないすべてのテスト スイート要素を選択します。

s3 =  suite.selectIf(~HasTag)
s3 = 

  Test with properties:

                  Name: 'ExampleTest/testA'
         ProcedureName: 'testA'
             TestClass: "ExampleTest"
            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.

バージョン履歴

R2014a で導入