Main Content

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

参考

(MATLAB Compiler) | | | | | (MATLAB Compiler)

関連するトピック