関数ベースのテストの拡張
通常、関数ベースのテストでは、明示的に一連の Test
オブジェクトを作成せずに、テスト ファイルを作成してそのファイル名を関数 runtests
へ渡します。しかし、明示的なテスト スイートを作成すると、関数ベースのテストで追加の機能を使用できるようになります。この機能には次のものがあります。
テスト ログと詳細レベル
テストの選択
テスト ランナーをカスタマイズするプラグイン
追加の機能については、クラスベースのユニット テストの使用を検討してください。詳細については、ユニット テストを記述する方法を参照してください。
セットアップ コードと破棄コードのフィクスチャ
テストを記述する場合、applyFixture
メソッドを使用して以下のようなアクションのセットアップおよび破棄コードを処理します。
現在の作業フォルダーの変更
パスへのフォルダーの追加
一時フォルダーの作成
警告表示の抑制
これらの fixtures
は、関数ベース テストの関数 setupOnce
、teardownOnce
、setup
および teardown
のアクションの手動入力によるコーディングに代わるものです。
たとえば、セットアップと破棄コードを記述して各テストの一時フォルダーをセットアップし、そのフォルダーを現在の作業フォルダーにする場合、関数 setup
および teardown
は次のようになります。
function setup(testCase) % store current folder testCase.TestData.origPath = pwd; % create temporary folder testCase.TestData.tmpFolder = ['tmpFolder' datestr(now,30)]; mkdir(testCase.TestData.tmpFolder) % change to temporary folder cd(testCase.TestData.tmpFolder) end function teardown(testCase) % change to original folder cd(testCase.TestData.origPath) % delete temporary folder rmdir(testCase.TestData.tmpFolder) end
しかし、フィクスチャを使用して、これらの両方の関数を 1 つの変更された関数 setup
で置き換えることができます。フィクスチャは初期状態を復元するために必要な情報を格納し、破棄アクションを実行します。
function setup(testCase) % create temporary folder f = testCase.applyFixture(matlab.unittest.fixtures.TemporaryFolderFixture); % change to temporary folder testCase.applyFixture(matlab.unittest.fixtures.CurrentFolderFixture(f.Folder)); end
テスト ログと詳細レベル
テスト関数では log
メソッドを使用できます。既定では、テスト ランナーは詳細レベル 1 (Terse
) でログが記録された診断をレポートします。他の詳細レベルのメッセージに対応するには、matlab.unittest.plugins.LoggingPlugin.withVerbosity
メソッドを使用します。TestRunner
オブジェクトを作成し、LoggingPlugin
を追加して、そのスイートを run
メソッドを使って実行します。テスト ランナーの作成についての詳細は、テスト ランナーのカスタマイズを参照してください。
テスト スイートの作成
関数ベースのテストを呼び出すと、一連の Test
オブジェクトが返されます。関数 testsuite
または matlab.unittest.TestSuite.fromFile
メソッドを使用することもできます。特定のテストが必要で、そのテスト名がわかっている場合は、matlab.unittest.TestSuite.fromName
を使用できます。特定のフォルダー内にあるすべてのテストからスイートを作成する場合には、matlab.unittest.TestSuite.fromFolder
を使用できます。
テストの選択
明示的なテスト スイートでは、セレクターを使用してスイートを調整します。いくつかのセレクターはクラスベースのテストにのみ適用されますが、テスト名に基づいてスイートのテストを選択できます。
matlab.unittest.TestSuite.fromFile
などのスイート生成メソッド内で、名前と値のペアの引数'Name'
を使用する。selectors
インスタンスおよびオプションのconstraints
インスタンスを使用する。
matlab.unittest.TestSuite.fromFile
などのスイート生成メソッドでこれらの手法を使用するか、スイートを作成し、selectIf
メソッドを使用してそれをフィルター処理します。たとえば、次のリストの 4 つの suite
の値は等価です。
import matlab.unittest.selectors.HasName import matlab.unittest.constraints.ContainsSubstring import matlab.unittest.TestSuite.fromFile f = 'rightTriTolTest.m'; selector = HasName(ContainsSubstring('Triangle')); % fromFile, name-value pair suite = TestSuite.fromFile(f,'Name','*Triangle*') % fromFile, selector suite = TestSuite.fromFile(f,selector) % selectIf, name-value pair fullSuite = TestSuite.fromFile(f); suite = selectIf(fullSuite,'Name','*Triangle*') % selectIf, selector fullSuite = TestSuite.fromFile(f); suite = selectIf(fullSuite,selector)
セレクターまたは名前と値のペアでスイート生成メソッドのいずれかを使用すると、テスト フレームワークはフィルター処理されたスイートを作成します。selectIf
メソッドを使用すると、テスト フレームワークはテスト スイート全体を作成し、その後でフィルター処理します。大規模なテスト スイートでは、この手法はパフォーマンスに影響を及ぼす場合があります。
テストの実行
関数ベースのテストを実行する方法はいくつかあります。
全テスト実行の範囲 | 使用する関数 |
---|---|
ファイル内 | テスト ファイルの名前を指定した runtests |
スイート内 | スイートを指定した run |
カスタムのテスト ランナーをもつスイート | run .(テスト ランナーのカスタマイズを参照) |
詳細は、さまざまなワークフローでのテスト実行を参照してください。
テスト診断へのプログラムによるアクセス
特定のクラスでは、フレームワークのテストは DiagnosticsRecordingPlugin
プラグインを使用して、テスト結果の診断を記録します。以下のいずれかを実行した場合、フレームワークでは既定でプラグインが使用されます。
関数
runtests
を使用してテストを実行する。入力なしで関数
testrunner
を使用してテストを実行する。関数
runperf
を使用してパフォーマンス テストを実行する。TimeExperiment
クラスのrun
メソッドを使用してパフォーマンス テストを実行する。
テストを実行した後、TestResult
オブジェクトの Details
プロパティの DiagnosticRecord
フィールドを使用して、記録された診断にアクセスできます。たとえば、テスト結果が変数 results
に保存されている場合、result(2).Details.DiagnosticRecord
にはスイート内の 2 番目のテストの記録された診断が含まれます。
記録された診断は DiagnosticRecord
オブジェクトです。テストの特定のタイプのテスト診断にアクセスするには、DiagnosticRecord
クラスの selectFailed
、selectPassed
、selectIncomplete
、selectLogged
の各メソッドを使用します。
既定では、DiagnosticsRecordingPlugin
プラグインは、検定エラーと、詳細レベル matlab.automation.Verbosity.Terse
でロギングされたイベントを記録します。詳細については、DiagnosticsRecordingPlugin
と DiagnosticRecord
を参照してください。
テスト ランナーのカスタマイズ
フレームワークがテスト スイートを実行する方法をカスタマイズするには、TestRunner
オブジェクトを使用します。TestRunner
オブジェクトを使用すると、次のことが可能です。
withNoPlugins
メソッドを使用して、コマンド ウィンドウで出力を生成しない。runInParallel
メソッドを使用してテストを並列実行する。addPlugin
メソッドを使用してプラグインをテスト ランナーに追加する。
たとえば、テスト スイート suite
を使用してサイレント テスト ランナーを作成し、TestRunner
の run
メソッドを使用してテストを実行します。
runner = matlab.unittest.TestRunner.withNoPlugins; results = runner.run(suite);
プラグインを使用してテスト ランナーをさらにカスタマイズします。たとえば、出力のリダイレクト、コード カバレッジの判定、または警告に対するテスト ランナーの応答方法の変更を行うことができます。詳細については、テスト ランナーへのプラグインの追加と plugins
クラスを参照してください。
参考
matlab.unittest.TestCase
| matlab.unittest.TestSuite
| matlab.automation.diagnostics.Diagnostic
| matlab.unittest.qualifications
| matlab.unittest.constraints
| matlab.unittest.selectors