mcpField
M
matlab-testing

matlab-testing

github.com/matlabテスト・品質1.2k76 回インストール1 日前に更新
リポジトリ

matlab-testing について

matlab-testing は、matlab.unittest フレームワークで MATLAB のユニットテストを作成・実行するスキルです。クラスベースのテスト、カバレッジ、CI/CD、App Designer のテストを扱い、MCP ツールによる実行を案内します。

主な機能

  1. 01クラスベースのユニットテスト構成
  2. 02パラメーター化テスト、フィクスチャ、モック
  3. 03MCP によるテスト実行と結果分析
  4. 04カバレッジ分析と CI/CD のガイダンス
  5. 05App Designer の UI テストガイダンス

活用シーン

  1. 01MATLAB の関数やクラスのテスト作成
  2. 02テストスイートの実行と失敗項目の確認
  3. 03カバレッジ不足の特定と CI の設定
  4. 04UI 操作による App Designer アプリのテスト

MCP 対応

run_matlab_test_file と evaluate_matlab_code の MCP ツールを使ったテスト実行を案内します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-testing

インストール後、Claude Code で/matlab-testingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

manifest.yaml
reference/
app-testing-guidance.md
constraints-guidance.md
fixtures-guidance.md
mocking-guidance.md
parameterized-tests-guidance.md
test-execution-guidance.md
scripts/
printCoverageGaps.m

詳細

テスト

matlab.unittest フレームワークを使用して、MATLAB の単体テストを生成、構成、実行します。クラスベースのテスト、パラメーター化テスト、フィクスチャ、モック、カバレッジ分析、CI/CD 統合、MCP 経由のアプリテストを扱います。

使用する場合

  • MATLAB の関数またはクラスのテスト作成を求められた場合
  • 既存のテストスイートを実行したい場合
  • カバレッジ分析または CI/CD の構成が必要な場合
  • テスト駆動開発 — 実装前にテストを作成する場合
  • プログラムによるジェスチャーを使って App Designer アプリをテストする場合(reference/app-testing-guidance.md を参照)

使用しない場合

  • Simulink モデルのテスト — Simulink テストスキルを使用してください
  • パフォーマンスのベンチマーク — プロファイリングのワークフローを使用してください

必ず守るルール

  • 最初にテスト計画を提示する — 複雑なテストスイートでは、コードを書く前に、テストメソッドとエッジケースを提案してユーザーの承認を得てください
  • 常にクラスベースのテストを使用する — すべてのテストファイルは matlab.unittest.TestCase を継承する必要があります。スクリプトベースのテストは使用しないでください
  • テストメソッドにロジックを含めない — if、switch、for、try/catch は使用しないでください。Arrange-Act-Assert に従ってください。テストに条件分岐が必要な場合は、メソッドを分割してください
  • 実装ではなく公開インターフェイスをテストする — プライベートメソッドを直接テストしないでください
  • MCP 経由で実行する — テストの実行には run_matlab_test_file または evaluate_matlab_code を使用してください

ワークフロー

簡単なテスト(動作が明確で、範囲が限定されている場合)
  1. テスト対象(メソッドと主なエッジケース)を簡潔に説明します
  2. ユーザーの確認後にテストファイルを作成します
標準的なテスト(大規模なコードベース、複数ファイルの場合)
  1. 要件を収集する — テスト対象のコード、期待される動作、エラー条件、範囲、依存関係
  2. テスト計画を提示する — テストメソッド、エッジケース、パラメーター化の方針を列挙し、承認を得ます
  3. 実装する — 以下のパターンに従ってテストを作成します
  4. 実行する — run_matlab_test_file MCP ツール経由で実行します
  5. カバレッジを確認する — テストされていないパスを特定し、テストを追加します

主な関数

カテゴリ関数目的
等価性verifyEqual, verifyNotEqual値を比較します(浮動小数点数には AbsTol を使用)
論理値verifyTrue, verifyFalse論理条件を確認します
サイズ/型verifySize, verifyClass, verifyEmpty構造を確認します
エラーverifyError正しい ID でエラーがスローされることを確認します
警告verifyWarning, verifyWarningFree警告の動作を確認します
基盤runtests, TestSuite, TestRunnerテストを実行して整理します
カバレッジCodeCoveragePlugin, CoverageResultテストカバレッジを測定します
確認レベル
レベル失敗時使用する場面
verifyテストを続行しますデフォルト — ほとんどのアサーション
assert現在のテストを停止しますセットアップの検証
fatalスイート全体を停止します環境の前提条件
assumeテストをスキップします条件付き実行(例:ツールボックスの確認)

パターン

基本的なテストクラス
classdef computeAreaTest < matlab.unittest.TestCase
    %computeAreaTest Tests for the computeArea function.

    methods (Test)
        function testSquare(testCase)
            result = computeArea(5, 5);
            testCase.verifyEqual(result, 25);
        end

        function testFloatingPoint(testCase)
            result = computeArea(1/3, 3);
            testCase.verifyEqual(result, 1, AbsTol=1e-12);
        end

        function testNegativeInputErrors(testCase)
            testCase.verifyError( ...
                @() computeArea(-1, 5), 'computeArea:negativeInput');
        end
    end
end
パラメーター化テスト

アサーションのロジックがすべてのケースで同一で、データだけが異なる場合に限り、パラメーター化してください。読みやすいテスト名には構造体を使用します。

classdef unitConverterTest < matlab.unittest.TestCase

    properties (TestParameter)
        conversionCase = struct( ...
            'freezing', struct('input', 0, 'expected', 32), ...
            'boiling',  struct('input', 100, 'expected', 212), ...
            'bodyTemp', struct('input', 37, 'expected', 98.6));
    end

    methods (Test)
        function testCelsiusToFahrenheit(testCase, conversionCase)
            result = celsiusToFahrenheit(conversionCase.input);
            testCase.verifyEqual(result, conversionCase.expected, AbsTol=1e-10);
        end
    end
end

高度なパラメーター化(組み合わせ、動的パラメーター、ClassSetupParameter)については、reference/parameterized-tests-guidance.md を参照してください。

セットアップ、ティアダウン、フィクスチャ

TestMethodTeardown ブロックよりも addTeardown を優先してください。ソースフォルダーの追加には PathFixture を使用します。

classdef fileProcessorTest < matlab.unittest.TestCase

    methods (TestClassSetup)
        function addSourceToPath(testCase)
            srcFolder = fullfile(fileparts(fileparts(mfilename('fullpath'))), 'src');
            testCase.applyFixture(matlab.unittest.fixtures.PathFixture(srcFolder, ...
                IncludingSubfolders=true));
        end
    end

    methods (Test)
        function testProcessFile(testCase)
            tmpDir = string(tempname);
            mkdir(tmpDir);
            testCase.addTeardown(@() rmdir(tmpDir, 's'));

            testFile = fullfile(tmpDir, "data.csv");
            writematrix(rand(10, 3), testFile);

            result = processFile(testFile);
            testCase.verifySize(result, [10 3]);
        end
    end
end

組み込みフィクスチャ、カスタムフィクスチャ、共有フィクスチャについては、reference/fixtures-guidance.md を参照してください。

決定性

再現可能なテストにするため、RNG のシードを設定し、ティアダウンで元に戻します。

methods (TestMethodSetup)
    function resetRandomSeed(testCase)
        originalRng = rng;
        testCase.addTeardown(@() rng(originalRng));
        rng(42, "twister");
    end
end
テストタグ

選択的な実行には TestTags を使用します。

methods (Test, TestTags = {'Unit'})
    function testFastCalculation(testCase)
        % ...
    end
end

methods (Test, TestTags = {'Integration', 'Slow'})
    function testFullPipeline(testCase)
        % ...
    end
end

タグによる実行:runtests('tests', Tag='Unit') または runtests('tests', ExcludeTag='Slow')。

テストの実行

MCP 経由

テストファイルには run_matlab_test_file MCP ツールを使用します。フィルタリングを伴うインライン実行の場合:

results = runtests('tests');                            % all tests in folder
results = runtests('tests', Tag='Unit');                % by tag
results = runtests('tests', Name='*Calculator*');       % by name pattern
results = runtests('tests', UseParallel=true);          % parallel execution
results = runtests('tests', Strict=true);               % warnings = failures
結果の分析
disp(results);

for r = results([results.Failed])
    fprintf('\nFAILED: %s\n', r.Name);
    disp(r.Details.DiagnosticRecord.Report);
end

カバレッジ分析

import matlab.unittest.TestRunner
import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoverageResult
import matlab.unittest.plugins.codecoverage.CoverageReport

runner = TestRunner.withTextOutput;
covFormat = CoverageResult;
runner.addPlugin(CodeCoveragePlugin.forFolder('src', ...
    Producing=[covFormat, CoverageReport('coverage-report')]));
results = runner.run(testsuite('tests'));

covResults = covFormat.Result;
disp(covResults);

カバレッジギャップを分析するには、reference/test-execution-guidance.md の printCoverageGaps スクリプトを使用します。

CI/CD 統合

CI パイプラインには、buildfile.m とともに buildtool を使用します。buildfile.m のテンプレートと CI 設定(GitHub Actions、Azure DevOps、GitLab CI)については、reference/test-execution-guidance.md を参照してください。

App Designer のテスト

プログラムによる UI ジェスチャー(press、choose、type、drag)を使ってアプリをテストする方法については、reference/app-testing-guidance.md を参照してください。

主なポイント:

  • matlab.unittest.TestCase ではなく、matlab.uitest.TestCase を継承します
  • アプリの作成後、最初のジェスチャーを実行する前に drawnow を呼び出します
  • uilabel.Text は文字列("text")ではなく、文字ベクトル('text')と比較します
  • .Enable は matlab.lang.OnOffSwitchState.on/.off と比較します

参考資料

必要に応じて読み込んでください。ほとんどのテストでは、このファイルに記載された内容だけで十分です。

読み込むタイミング参考資料
テストにセットアップ/ティアダウン、一時ディレクトリ、パス管理、共有状態が必要な場合reference/fixtures-guidance.md
浮動小数点の許容誤差の選択、制約オブジェクト、カスタム制約が必要な場合reference/constraints-guidance.md
複数のパラメーター、動的パラメーター、組み合わせ方法が必要な場合reference/parameterized-tests-guidance.md
コードが外部サービスに依存し、モックオブジェクトまたは依存性注入が必要な場合reference/mocking-guidance.md
CI でのテスト実行、buildtool の設定、カバレッジギャップ分析が必要な場合reference/test-execution-guidance.md
ジェスチャー、ダイアログ、非同期コールバックを使って App Designer アプリをテストする場合reference/app-testing-guidance.md

規約

  • 常に matlab.unittest.TestCase を継承するクラスベースのテストを使用します
  • テストファイルには <functionName>Test.m という名前を付け、tests/ ディレクトリに配置します
  • デフォルトでは verify の判定を使用します。一つのテストが失敗しても、すべてのテストを実行できます
  • すべての浮動小数点比較で AbsTol を使用し、厳密な等価性には依存しません
  • テストメソッドにロジックを含めず、Arrange-Act-Assert に従います
  • クリーンアップには addTeardown を使用します。テストが失敗した場合も実行されます
  • 読みやすいパラメーター化テスト名には、構造体ベースの TestParameter を使用します
  • テストメソッドは目的を絞り、一つのメソッドにつき一つの動作をテストします
  • テストは互いに独立し、並列実行に対応している必要があります
  • 結果を自動取得するには、run_matlab_test_file MCP ツールでテストを実行します

Copyright 2026 The MathWorks, Inc.


コメント