Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

アプリ テスト フレームワークの概要

MATLAB® アプリ テスト フレームワークを使用し、App Designer のアプリや関数 uifigure を用いてプログラムによってビルドしたアプリをテストします。アプリ テスト フレームワークでは、ボタン押下やスライダーのドラッグなどの UI コンポーネント上での動作をプログラムから実行するテスト クラスの作成、およびアプリの動作検証を行うことができます。

アプリのテスト

テストの作成 – クラスベースのテストでは、matlab.uitest.TestCase をサブクラス化することによってアプリ テスト フレームワークを使用できます。matlab.uitest.TestCasematlab.unittest.TestCase のサブクラスであるため、検定、フィクスチャ、およびプラグインなどのユニット テスト フレームワークの機能にテストがアクセスすることができます。コマンド プロンプトでアプリ テスト フレームワークを試すには、matlab.uitest.TestCase.forInteractiveUse を使用してテスト ケース インスタンスを作成します。

テストの内容 – 通常、アプリのテストは matlab.uitest.TestCasepressdrag などの動作メソッドを使用してアプリ コンポーネントをプログラム的に操作し、その結果の検定を実行します。たとえば、チェック ボックスを 1 つクリックし、その他のチェック ボックスが無効になることを検証するテストなどがあります。あるいは、テキスト ボックスに数値を入力し、アプリでその結果が正しく計算されることを検証するテストもあります。このタイプのテストでは、テストするアプリのプロパティを理解している必要があります。ボタン押下を検証するには、MATLAB がアプリ オブジェクトのどこにボタンのステータスを格納するかを把握していなければなりません。計算の結果を検証するには、アプリ内の結果にアクセスする方法を把握していなければなりません。

テストのクリーンアップ – ベスト プラクティスとしては、テストの後にアプリを削除する破棄アクションを含めます。通常、テスト メソッドは matlab.unittest.TestCaseaddTeardown メソッドを使用してこのアクションを追加します。

アプリのロック – アプリ テストで Figure が作成されると、フレームワークはコンポーネントと外部の相互作用を防ぐためにその Figure を直ちにロックします。コマンド プロンプトで試すために matlab.uitest.TestCase.forInteractiveUse のインスタンスを作成する場合、アプリ テスト フレームワークは UI コンポーネントをロックしません。

デバッグの目的で Figure のロックを解除するには、関数 matlab.uitest.unlock を使用します。

UI コンポーネントの動作のサポート

matlab.uitest.TestCase の動作メソッドはさまざまな UI コンポーネントをサポートしています。

コンポーネントmatlab.uitest.TestCase の動作メソッド
presschoosedragtypehover
座標軸   
ボタン    
ボタン グループ    
チェック ボックス   
日付ピッカー    
離散型ノブ    
ドロップ ダウン   
編集フィールド (数値、テキスト)    
イメージ    
ノブ   
リスト ボックス    
メニュー    
極座標軸   
ラジオ ボタン   
スライダー   
スピナー   
状態ボタン   
スイッチ (ロッカー、スライダー、トグル)   
タブ    
タブ グループ    
テキスト エリア    
トグル ボタン   
ツリー ノード    
UI 座標軸   
UI Figure   

アプリ用テストの記述

この例では、プロットのサンプル サイズとカラーマップを変更するオプションをもつアプリ用テストの記述方法を説明します。プログラムによりアプリを操作して結果を検定するには、アプリ テスト フレームワークとユニット テスト フレームワークを組み合わせて使用します。

テストの前にこのアプリのプロパティを確認するため、コマンド プロンプトでアプリのインスタンスを作成します。

app = ConfigurePlotAppExample;

この手順はテストには必要ありませんが、アプリ テストで使用されるプロパティを確認しておくと役に立ちます。たとえば、アプリ オブジェクト内の [Update Plot] ボタンにアクセスするには app.UpdatePlotButton を使用します。

matlab.uitest.TestCase から継承するテスト クラスを作成します。

classdef testConfigurePlotAppExample < matlab.uitest.TestCase
    
    methods (Test)

    end
    
end

サンプル サイズをテストするテスト メソッド test_SampleSize を作成します。このテスト メソッドは、サンプル サイズを変更し、プロットを更新して、表面が指定のサンプル サイズを使用していることを検証します。addTeardown の呼び出しは、テストの完了後にアプリを削除します。

classdef testConfigurePlotAppExample < matlab.uitest.TestCase
    
    methods (Test)
        function test_SampleSize(testCase)
            app = ConfigurePlotAppExample;
            testCase.addTeardown(@delete,app);
            
            testCase.type(app.SampleSizeEditField,12);
            testCase.press(app.UpdatePlotButton);
            
            ax = app.UIAxes;
            surfaceObj = ax.Children;
            testCase.verifySize(surfaceObj.ZData,[12 12]);
        end
    end
    
end

カラーマップをテストする 2 番目のテスト メソッド test_Colormap を作成します。このテスト メソッドは、カラーマップを選択し、プロットを更新して、プロットが指定のカラーマップを使用していることを検証します。以下に完全なコードを示します。

classdef testConfigurePlotAppExample < matlab.uitest.TestCase
    
    methods (Test)
        function test_SampleSize(testCase)
            app = ConfigurePlotAppExample;
            testCase.addTeardown(@delete,app);
            
            testCase.type(app.SampleSizeEditField,12);
            testCase.press(app.UpdatePlotButton);
            
            ax = app.UIAxes;
            surfaceObj = ax.Children;
            testCase.verifySize(surfaceObj.ZData,[12 12]);
        end
        
        function test_Colormap(testCase)
            app = ConfigurePlotAppExample;
            testCase.addTeardown(@delete,app);
            
            testCase.choose(app.ColormapDropDown,'Winter');
            testCase.press(app.UpdatePlotButton);
            
            expectedMap = winter;
            ax = app.UIAxes;
            testCase.verifyEqual(ax.Colormap,expectedMap);
        end
    end
    
end

コマンド プロンプトで、テストを実行します。

results = runtests('testConfigurePlotAppExample')
Running testConfigurePlotAppExample
..
Done testConfigurePlotAppExample
__________


results = 

  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

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

参考

関連するトピック