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 の動作メソッド
presschoosedragscrolltypehoverchooseContextMenu
座標軸axes  
ボタンuibutton     
ボタン グループuibuttongroup      
チェック ボックスuicheckbox    
日付ピッカーuidatepicker     
離散型ノブuiknob     
ドロップ ダウンuidropdown    
編集フィールド (数値、テキスト)uieditfield     
ハイパーリンクuihyperlink     
イメージuiimage     
ノブuiknob    
ラベルuilabel      
リスト ボックスuilistbox     
メニューuimenu      
パネルuipanel    
極座標軸polaraxes    
プッシュ ツールuipushtool      
ラジオ ボタンuiradiobutton    
スライダーuislider    
スピナーuispinner    
状態ボタンuibutton    
スイッチ (ロッカー、スライダー、トグル)uiswitch    
タブuitab      
タブ グループuitabgroup      
テーブルuitable    
テキスト エリアuitextarea     
トグル ボタンuitogglebutton    
トグル ツールuitoggletool     
ツリー ノードuitreenode     
UI 座標軸uiaxes  
UI Figureuifigure   

例: アプリ用テストの記述

この例では、現在のフォルダー内のアプリ用にテストを記述する方法を示します。このアプリには、プロットのサンプル サイズとカラーマップを変更するオプションが用意されています。プログラムによりアプリを操作して結果を検定するには、アプリ テスト フレームワークとユニット テスト フレームワークを使用します。

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

app = ConfigurePlotAppExample;

{"String":"Figure Configure Plot contains an axes object and other objects of type uilabel, uidropdown, uibutton, uinumericeditfield. The axes object contains an object of type surface.","Tex":[],"LaTex":[]}

現在のフォルダー内の ConfigurePlotAppExampleTest.m という名前のファイルで、matlab.uitest.TestCase から派生させたテスト クラスを作成します。2 つの Test メソッドを ConfigurePlotAppExampleTest クラスに追加します。各メソッドで、テストする前にアプリのインスタンスを作成し、テストの完了後にそのインスタンスを削除します。

  • testSampleSize メソッド — サンプル サイズを変更し、プロットを更新して、プロットが指定のサンプル サイズを使用していることを検証します。

  • testColormap メソッド — カラーマップを選択し、プロットを更新して、プロットが指定のカラーマップを使用していることを検証します。

classdef ConfigurePlotAppExampleTest < matlab.uitest.TestCase
    methods (Test)
        function testSampleSize(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 testColormap(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("ConfigurePlotAppExampleTest")
Running ConfigurePlotAppExampleTest
.
.
Done ConfigurePlotAppExampleTest
__________
results = 
  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

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

参考

関連するトピック