メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

R2026a

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

アプリのテスト

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

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

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

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

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

ダイアログ ボックスの操作 — テスト中に表示されるモーダル ダイアログ ボックスは、プログラムによるアプリ コンポーネントの操作を妨げます。モーダル ダイアログ ボックスが表示された後、アプリの操作を続けるには、まずダイアログ ボックス内のオプションを選択するか、ダイアログ ボックスを閉じる必要があります。ダイアログ ボックスをプログラムによって操作するには、chooseDialog または dismissDialog メソッドを使用します。

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.

参考

クラス

トピック