Main Content

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

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

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

アプリのテスト

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

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

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

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

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

警告の消去 – 場合によっては、アプリによってモーダル警告ダイアログ ボックスが表示され、アプリ コンポーネントを操作できなくなります。ダイアログ ボックスの背後にある Figure にアクセスするには、このダイアログ ボックスを閉じなければならない場合があります。Figure ウィンドウで警告ダイアログ ボックスをプログラムにより閉じるには、dismissAlertDialog メソッドを使用します。

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

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

コンポーネント一般的な作成関数matlab.uitest.TestCase の動作メソッド
presschoosedragtypehoverchooseContextMenu
座標軸axes  
ボタンuibutton    
ボタン グループuibuttongroup     
チェック ボックスuicheckbox   
日付ピッカーuidatepicker    
離散型ノブuiknob    
ドロップ ダウンuidropdown   
編集フィールド (数値、テキスト)uieditfield    
イメージuiimage    
ノブuiknob   
リスト ボックスuilistbox    
メニューuimenu     
パネルuipanel   
極座標軸polaraxes   
プッシュ ツールuipushtool     
ラジオ ボタンuiradiobutton   
スライダーuislider   
スピナーuispinner   
状態ボタンuibutton   
スイッチ (ロッカー、スライダー、トグル)uiswitch   
タブuitab     
タブ グループuitabgroup     
テーブルuitable   
テキスト エリアuitextarea    
トグル ボタンuitogglebutton   
トグル ツールuitoggletool    
ツリー ノードuitreenode    
UI 座標軸uiaxes  
UI Figureuifigure   

アプリ用テストの記述

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

コマンド プロンプトで、アプリを含むフォルダーを MATLAB 検索パスに追加して、アプリにアクセスできるようにします。

addpath(fullfile(matlabroot,'examples','matlab','main'))

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

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.
   5.0835 seconds testing time.

参考

関連するトピック