MATLAB ユニット テストのコンパイル
MATLAB® のユニット テスト フレームワークを使用してテストを記述する場合、MATLAB がインストールされていないターゲット マシン上でテストを実行する目的で、スタンドアロン アプリケーションを作成できます (MATLAB Compiler™ が必要)。
MATLAB コードをコンパイルするには、
compiler.build.standaloneApplication
(MATLAB Compiler) またはmcc
(MATLAB Compiler) コマンドを実行するか、アプリケーション コンパイラ (MATLAB Compiler) アプリを使用します。スタンドアロン アプリケーションを実行するには、MATLAB Runtime をインストールします (アプリケーション コンパイラ アプリを使用する場合、生成されるアプリケーションに MATLAB Runtime インストーラーを含めるかどうかを決定できます)。詳細については、MATLAB Runtime のインストールと構成 (MATLAB Compiler)を参照してください。
MATLAB Compiler は、クラスベースのユニット テストのみをサポートします (スクリプトベースまたは関数ベースのユニット テストをコンパイルすることはできません)。さらに、MATLAB Compiler は現在、パフォーマンス テスト フレームワークを使用して作成されたテストをサポートしていません。
スタンドアロン アプリケーションによるテストの実行
この例では、ユニット テストからスタンドアロン アプリケーションを作成し、生成されたアプリケーションをターミナル ウィンドウ (Microsoft® Windows® プラットフォーム上) から実行する方法を示します。
現在のフォルダーにある TestRand.m
というファイルに、MATLAB 乱数発生器をテストするパラメーター化テスト クラスを作成します (TestRand クラス定義の概要を参照)。
現在のフォルダーに関数 runMyTests
を作成します。この関数は TestRand
クラスからテスト スイートを作成し、テストを実行して、テスト結果を表示します。
function runMyTests suite = matlab.unittest.TestSuite.fromClass(?TestRand); runner = matlab.unittest.TestRunner.withNoPlugins; results = runner.run(suite); disp(results) end
コマンド ウィンドウで mcc
コマンドを実行して、関数 runMyTests
をスタンドアロン アプリケーションにコンパイルします。MATLAB Compiler はアプリケーションを現在のフォルダーに生成します。
mcc -m runMyTests
ターミナル ウィンドウを開いて、スタンドアロン アプリケーションがパッケージ化されたフォルダーに移動し、アプリケーションを実行します。
C:\work>runMyTests 1x1200 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 1200 Passed, 0 Failed, 0 Incomplete. 3.11 seconds testing time.
スタンドアロン アプリケーションの作成方法と実行方法の詳細については、MATLAB 関数からのスタンドアロン アプリケーションの作成 (MATLAB Compiler)を参照してください。
スタンドアロン アプリケーションでのテストの並列実行
R2020b 以降、テストの並列実行をサポートするスタンドアロン アプリケーションを作成できます (Parallel Computing Toolbox™ が必要)。この機能を使用するには、テスト実行をトリガーするファイル内で命令 %#function parallel.Pool
を使用しなければなりません。%#function
(MATLAB Compiler) プラグマは MATLAB Compiler に、並列プールへのアクセスを提供するには parallel.Pool
(Parallel Computing Toolbox) オブジェクトをコンパイルに含めなければならないことを通知します。
たとえば、テストがファイル TestRand.m
にあるとします。次の関数をコンパイルすることにより、それらのテストを並列実行するスタンドアロン アプリケーションを作成できます。
function runMyTestsInParallel %#function parallel.Pool results = runtests('TestRand.m','UseParallel',true); disp(results) end
mcc
コマンドを使用して、関数をスタンドアロン アプリケーションにコンパイルします。このアプリケーションにテスト ファイルを含めるように MATLAB Compiler に命令するには、-a
オプションを使用してファイル名を指定します。
mcc -m runMyTestsInParallel -a TestRand.m
TestRand クラス定義の概要
以下のコードは、TestRand
クラスの内容全体を提示します。
classdef TestRand < matlab.unittest.TestCase properties (TestParameter) dim1 = createDimensionSizes; dim2 = createDimensionSizes; dim3 = createDimensionSizes; type = {'single','double'}; end methods (Test) function testRepeatable(testCase,dim1,dim2,dim3) state = rng; firstRun = rand(dim1,dim2,dim3); rng(state) secondRun = rand(dim1,dim2,dim3); testCase.verifyEqual(firstRun,secondRun); end function testClass(testCase,dim1,dim2,type) testCase.verifyClass(rand(dim1,dim2,type),type) end end end function sizes = createDimensionSizes % Create logarithmically spaced sizes up to 100 sizes = num2cell(round(logspace(0,2,10))); end
参考
mcc
(MATLAB Compiler) | run (TestRunner)
| run (TestSuite)
| runtests
| runInParallel
| compiler.build.standaloneApplication
(MATLAB Compiler)
関連するトピック
- ユニット テストを記述する方法
- MATLAB 関数からのスタンドアロン アプリケーションの作成 (MATLAB Compiler)