Main Content

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

runtests

一連のテストの実行

説明

results = runtests は、現在のフォルダーのすべてのテストを実行し、結果を TestResult 配列として返します。

results = runtests(tests) は、指定された一連のテストを実行します。

results = runtests(tests,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して、一連のテストを実行します。

すべて折りたたむ

現在の作業フォルダーに myExample というフォルダーを作成し、そのフォルダーに切り替えます。

myExample フォルダーに typeTest.m というテスト スクリプトを作成します。

%% Test double class
exp = 'double';
act = ones;
assert(isa(act,exp))

%% Test single class
exp = 'single';
act = ones('single');
assert(isa(act,exp))

%% Test uint16 class
exp = 'uint16';
act = ones('uint16');
assert(isa(act,exp))

myExample フォルダーに sizeValueTest.m というテスト スクリプトを作成します。

%% Test size
exp = [7 13];
act = ones([7 13]);
assert(isequal(size(act),exp))

%% Test values
act = ones(42);
assert(unique(act) == 1)

現在のフォルダー内のすべてのテストを実行します。

runtests
Running sizeValueTest
..
Done sizeValueTest
__________

Running typeTest
...
Done typeTest
__________


ans = 

  1x5 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   5 Passed, 0 Failed, 0 Incomplete.
   0.038077 seconds testing time.

MATLAB® で実行されたテストは 5 つです。sizeValueTest の 2 つのテストと typeTest の 3 つのテストにパスしています。

以下に示すテスト ファイルを作成し、MATLAB パス上に runtestsExampleTest.m として保存します。

function tests = runtestsExampleTest
tests = functiontests(localfunctions);

function testFunctionOne(testCase)

テストを実行します。

results = runtests('runtestsExampleTest.m');
Running runtestsExampleTest
.
Done runtestsExampleTest
__________

前の例のテスト ファイル runtestsExampleTest.m が存在しない場合は作成します。

サブフォルダー tmpTest を作成して、そのフォルダーに次の runtestsExampleSubFolderTest.m ファイルを作成します。

function tests = runtestsExampleSubFolderTest
tests = functiontests(localfunctions);

function testFunctionTwo(testCase)

'IncludeSubfolders' を true に設定して、tmpTest の上のフォルダーからテストを実行します。

results = runtests(pwd,'IncludeSubfolders',true);
Running runtestsExampleTest
.
Done runtestsExampleTest
__________

Running runtestsExampleSubFolderTest
.
Done runtestsExampleSubFolderTest
__________

runtests で現在のフォルダーとサブフォルダー内のテストが実行されました。

関数 runtests'IncludeSubfolders' プロパティを指定しない場合、サブフォルダー内のテストは実行されません。

results = runtests(pwd);
Running runtestsExampleTest
.
Done runtestsExampleTest
__________

現在のフォルダーがプロジェクトのルート フォルダーであるか、プロジェクトのルート フォルダーへの絶対パスを関数 runtests に渡した場合、runtests は、Test の分類ラベルが付けられた、指定されたプロジェクトに含まれるすべてのテスト ファイルを実行します。

この例では、C:/projects/project1 のプロジェクト フォルダーに Test の分類ラベルが付けられたテスト ファイルが含まれていると仮定します。現在のフォルダーをプロジェクトのルート フォルダーに変更し、プロジェクト内のテストを実行します。

cd 'C:/projects/project1/'
runtests

あるいは、project1 を開いてテストを実行することもできます。終了したらプロジェクトを閉じます。

proj = openProject('C:/projects/project1/');
runtests
close(proj)

さらに別の方法として、プロジェクトのルート フォルダーへの絶対パスを runtests に渡してプロジェクト内のテストを実行することもできます。

runtests('C:/projects/project1/')

以下に示すテスト ファイルを作成し、MATLAB® パス上に runInParallelTest.m として保存します。

function tests = runInParallelTest
tests = functiontests(localfunctions);

function testA(testCase)
verifyEqual(testCase,5,5);

function testB(testCase)
verifyTrue(testCase,logical(1));

function testC(testCase)
verifySubstring(testCase,'SomeLongText','Long');

function testD(testCase)
verifySize(testCase,ones(2,5,3),[2 5 3]);

function testE(testCase)
verifyGreaterThan(testCase,3,2);

function testF(testCase)
verifyEmpty(testCase,{},'Cell array is not empty.');

function testG(testCase)
verifyMatches(testCase,'Some Text','Some [Tt]ext');

テストを並列実行します。テストを並列実行するには Parallel Computing Toolbox™ が必要です。テスト フレームワークによって、グループの順序と数、あるいは各グループに含めるテストが異なる場合があります。

results = runtests('runInParallelTest','UseParallel',true);
Split tests into 7 groups and running them on 4 workers.
----------------
Finished Group 2
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 3
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 1
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 4
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 6
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 5
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 7
----------------
Running runInParallelTest
.
Done runInParallelTest
__________

作業フォルダーで 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

テスト スイート全体では 11 のテスト要素があります。testClass メソッドから 6 要素、testSize メソッドから 2 要素、testDefaultClasstestDefaultSizetestDefaultValue メソッドから各 1 要素です。

コマンド プロンプトで、testSize メソッドのすべてのパラメーター化を実行します。

runtests('testZeros/testSize')
Running testZeros
..
Done testZeros
__________


ans = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.059626 seconds testing time.

関数 runtests によって、testSize メソッドからパラメーター化された 2 つのテストが実行されました。あるいは、runtests('testZeros','ProcedureName','testSize') を使用してテスト プロシージャ名を指定することもできます。

outSize パラメーター プロパティを使用するテスト要素を実行します。

runtests('testZeros','ParameterProperty','outSize')
Running testZeros
........
Done testZeros
__________


ans = 

  1x8 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   8 Passed, 0 Failed, 0 Incomplete.
   0.066328 seconds testing time.

関数 runtestsoutSize パラメーター プロパティを使用する 8 つのテストを実行しました。testClass メソッドから 6 要素と testSize メソッドから 2 要素です。

single パラメーター名を使用するテスト要素を実行します。

runtests('testZeros','ParameterName','single')
Running testZeros
..
Done testZeros
__________


ans = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.012544 seconds testing time.

関数 runtestsoutSize パラメーター名を使用する testClass メソッドから 2 つのテストを実行しました。

入力引数

すべて折りたたむ

テスト スイート。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。cell 配列の各文字ベクトルには、テスト ファイル、テスト クラス、テスト スイート要素、テスト クラスを含むパッケージ、テスト ファイルを含むフォルダー、あるいはテスト ファイルを含むプロジェクト フォルダーのそれぞれの名前を含めることができます。

例: runtests('ATestFile.m')

例: runtests('ATestFile/aTest')

例: runtests('mypackage.MyTestClass')

例: runtests(pwd)

例: runtests({'mypackage.MyTestClass','ATestFile.m',pwd,'mypackage.subpackage'})

例: runtests('C:/projects/project1/')

名前と値の引数

例: runtests(tests,'Name','productA_*') は、'productA_' で始まる名前のテスト要素を実行します。

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

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

tests の実行時にデバッグ機能を適用するかどうかを示す指標。false または true (0 または 1) として指定します。たとえば、テストの失敗が検出された場合、フレームワークはテストの実行を中止し、デバッグ モードになります。

サブフォルダー内のテストを実行するかどうかを示すインジケーター。false または true (0 または 1) として指定します。既定では、フレームワークは指定されたフォルダー内のテストを実行しますが、そのサブフォルダー内のテストは実行しません。

サブパッケージ内のテストを実行するかどうかを示すインジケーター。false または true (0 または 1) として指定します。既定では、フレームワークは指定されたパッケージ内のテストを実行しますが、そのサブパッケージ内のテストは実行しません。

参照プロジェクトのテストを含めるかどうかのインジケーター。logical の false または true として指定します。参照プロジェクトの詳細については、大規模なプロジェクトのコンポーネント化を参照してください。

テスト実行用に含まれる診断ログの最大詳細レベル。0 ~ 4 の整数値、または matlab.unittest.Verbosity 列挙オブジェクトとして指定します。関数 runtests は、このレベル以下でログが作成された診断情報を含めます。整数値は matlab.unittest.Verbosity 列挙型のメンバーに対応します。

既定では、runtestsmatlab.unittest.Verbosity.Terse レベル (レベル 1) でログが作成された診断情報を含めます。診断ログを除外するには、LoggingLevelVerbosity.None (レベル 0) に指定します。

診断ログとは、log (TestCase) メソッドまたは log (Fixture) メソッドの呼び出しによってテスト フレームワークに送る診断です。

数値表現列挙型メンバー名詳細レベルの説明
0None

情報なし

1Terse

最小限の情報

2Concise

中程度の情報量

3Detailed

ある程度の補足的な情報

4Verbose

多くの補足的な情報

イベント詳細の表示レベル。0 ~ 4 の整数値、または matlab.unittest.Verbosity 列挙オブジェクトとして指定します。整数値は matlab.unittest.Verbosity 列挙型のメンバーに対応します。

関数 runtests は、失敗し、ログが作成されているイベントを OutputDetail で指定された詳細情報とともに表示します。既定では、runtests は失敗したイベントとログが作成されたイベントを matlab.unittest.Verbosity.Detailed レベル (レベル 3) で表示し、テスト実行の進行状況を matlab.unittest.Verbosity.Concise レベル (レベル 2) で表示します。

数値表現列挙型メンバー名詳細レベルの説明
0None

情報なし

1Terse

最小限の情報

2Concise

中程度の情報量

3Detailed

ある程度の補足的な情報

4Verbose

多くの補足的な情報

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

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

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

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

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

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

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

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

コード カバレッジ レポートに含めるソース コードへのパス。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。このオプションを使用した場合、runtests は指定されたテストを実行し、指定されたコード ファイルについてコード カバレッジ レポートを生成します。レポートには、テストで実行されたソース コードの行が表示されます。

ソース コードへのパスは、1 つ以上のフォルダーまたはファイル (拡張子が .m.mlx または .mlapp) への絶対または相対パスとすることができます。

例: runtests(tests,'ReportCoverageFor','mySource.m')

データ型: char | string | cell

tests の実行時に厳密なチェックを適用することを示す指標。false または true (0 または 1) として指定します。たとえば、テストで警告が発行されると、フレームワークで検定エラーが生成されます。

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

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

テストを並列実行するかどうかを示すインジケーター。false または true (0 または 1) として指定します。

既定では runtests がテストを逐次実行します。UseParalleltrue に設定すると、runtests はテスト スイートをグループに分け、次の条件が満たされる場合に各グループを並列実行します。

  • Parallel Computing Toolbox がインストールされている。

  • 開いている並列プールが存在するか、[並列基本設定] でプールの自動作成が有効にされている。

そうでない場合、runtestsUseParallel の設定値に関係なくテストを逐次的に実行します。

テストの並列実行は他のオプションと互換性がない場合があります。たとえば、UseParallelDebug の両方が true に設定された場合、テストは逐次発生します。並列実行の場合、テスト フレームワークによって、グループの順序と数、あるいは各グループに含めるテストが異なる場合があります。

特定の検定メソッドによるテストで使用される MAT ファイルを作成または更新するかどうかを示すインジケーター。false または true (0 または 1) として指定します。GenerateBaselines を使用するには、Simulink® Test™ がインストールされていなければなりません。

この引数を true と指定すると、テストでは sltest.TestCase (Simulink Test) クラスのこれらの検定メソッドの 1 つを使用しなければなりません。

  • verifySignalsMatch (たとえば、testCase.verifySignalsMatch(actVal,'myBaseline.mat'))

  • assumeSignalsMatch

  • assertSignalsMatch

  • fatalAssertSignalsMatch

詳細については、Using MATLAB-Based Simulink Tests in the Test Manager (Simulink Test)を参照してください。

ヒント

  • 共有テスト フィクスチャをテストで使用し、関数 runtests への入力を string 配列または文字ベクトルの cell 配列で指定する場合、テスト フレームワークは、共有フィクスチャのセットアップと破棄の操作を減らすために配列を並べ替えます。結果として、テストは入力配列内の要素の順序とは異なる順序で実行される可能性があります。詳細については、sortByFixtures を参照してください。

  • R2020b 以降、テストの並列実行をサポートするスタンドアロン アプリケーションを作成できるようになりました (MATLAB Compiler™ および Parallel Computing Toolbox が必要です)。MATLAB Compiler が、テストの並列実行に必要なすべてのコンポーネントの位置を特定してパッケージ化できるようにするために、命令 %#function parallel.Pool をコードで使用します。詳細については、MATLAB ユニット テストのコンパイルを参照してください。

  • R2021a 以降、スレッド ワーカーの並列プールを起動してから関数 runtests の呼び出しで名前と値のペアの引数 UseParallel を指定して、スレッドベースのプール (Parallel Computing Toolbox が必要) でテストを実行できます。

    スレッドベースのプールで runtests を使用して実行するテストには、次の制限が適用されます。

    • テストとソース コードはスレッド ワーカーでサポートされる機能のみを使用しなければなりません。スレッドベース環境の制限の詳細については、スレッドベースの環境またはプロセスベースの環境の選択 (Parallel Computing Toolbox)を参照してください。

    • テスト内容を定義するフォルダーは MATLAB 検索パス上になければなりません。

    • テスト名は、クラスまたは関数の名前を使用してファイル拡張子なしで指定する必要があります。

    • テスト アーティファクトの保存はスレッドベースのプールでサポートされません。

    • Simulink はスレッドベースの環境でサポートされません。したがって、Simulink Test を使用して作成されたテストはスレッドベースのプールで実行できません。

拡張機能

バージョン履歴

R2013b で導入