Main Content

matlab.unittest.plugins.FailOnWarningsPlugin クラス

名前空間: matlab.unittest.plugins

警告を発行するテストに失敗するプラグイン

説明

FailOnWarningsPlugin は、TestRunner に追加される、警告を発行するすべてのテストに失敗するプラグインを作成します。このプラグインは、警告を発行するテスト スコープ内で検定エラーを発生させます。たとえば、共有テスト フィクスチャにより警告が発行される場合、プラグインはそのフィクスチャで検定エラーを生成し、このフィクスチャを共有するすべてのテストに失敗します。

FailOnWarningsPlugin プラグインは次の状況ではエラーを生成しません。

  • テストが制約を満たすかどうかに関係なく、IssuesWarnings または IssuesNoWarnings などの制約に基づいて警告を発行する場合。

  • 警告が無効にされている場合。たとえば、SuppressedWarningsFixture を使用して警告を無効にした場合など。

構築

matlab.unittest.plugins.FailOnWarningsPlugin は、警告を発行するすべてのテストに失敗するプラグインを作成します。

matlab.unittest.plugins.FailOnWarningsPlugin('Ignoring',warnIDs) は、指定された警告識別子 warnIDs については失敗しないプラグインを作成します。

入力引数

すべて展開する

無視する警告の識別子。文字ベクトルの cell 配列として指定します。プラグインは warnIDs に含まれている識別子をもつ警告についてはテストに失敗しません。

例: FailOnWarningsPlugin('Ignoring',{'MATLAB:singularMatrix'})

プロパティ

すべて展開する

Ignore プロパティの既定値は空です。プロパティを文字ベクトルの cell 配列として指定するには、'Ignoring' 構文を使用してプラグイン インスタンスを作成してください。

コピーのセマンティクス

ハンドル。コピー操作に対するハンドル クラスの影響については、オブジェクトのコピーを参照してください。

すべて折りたたむ

一連の線形方程式の解を求める関数 solve を作成します。ここで関数 solve には意図的なエラーが含まれています。行列の特異性をチェックする assert の呼び出しには、det ではなく rcond を使用しなければなりません。

function x = solve(A,b)

assert(abs(det(A)) > 1e-12,... % intentional bug for illustrative purposes
    'The matrix is singular or nearly singular'); 

x = A\b;

次のテスト クラスを作成します。testTwo に含まれる A 行列は特異ですが、関数 solve にバグがあるため、assert の呼び出しでこれがキャッチされません。

classdef TestSolve < matlab.unittest.TestCase
    
    methods(Test)
        function testOne(testCase)
            A = eye(3);
            b = [3; 4; 1];
            testCase.verifyEqual(solve(A,b),b);
        end

        function testTwo(testCase)
            A = [1e-100 0; 0 1e100];
            b = [5; 5];
            expX = [5e100 5e-100];
            testCase.verifyEqual(solve(A,b),expX);
        end
    end
end

コマンド プロンプトで、テスト スイートとテスト ランナーを作成します。

import matlab.unittest.TestRunner;
import matlab.unittest.TestSuite;
import matlab.unittest.plugins.FailOnWarningsPlugin;

suite = TestSuite.fromClass(?TestSolve);
runner = TestRunner.withTextOutput;

FailOnWarningsPlugin プラグインを追加して、テストを実行します。関数 solve は警告を発行するので、testTwo は失敗します。FailOnWarningsPlugin を使用しない場合、関数 solve は警告を発行しますが、両方のテストがパスします。

runner.addPlugin(FailOnWarningsPlugin);
result = runner.run(suite);
Running TestSolve
.Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.000000e-200.
.
================================================================================
Verification failed in TestSolve/testTwo.

    ---------------------
    Framework Diagnostic:
    ---------------------
    TestSolve/testTwo issued warnings:    
        
        ---------------------------
        MATLAB:nearlySingularMatrix
        ---------------------------
        Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.000000e-200.
            In C:\work\solve.m (solve) at 6
            In C:\work\TestSolve.m (TestSolve.testTwo) at 14

    ------------------
    Stack Information:
    ------------------
    In C:\Program Files\MATLAB\R2015b\toolbox\matlab\testframework\+matlab\+unittest\+plugins\FailOnWarningsPlugin.m (FailOnWarningsPlugin.teardownTestMethod) at 164
================================================================================

Done TestSolve
__________

Failure Summary:

     Name               Failed  Incomplete  Reason(s)
    ================================================================
     TestSolve/testTwo    X                 Failed by verification.

ヒント

  • 警告スタック トレースの表示を設定するには、関数 warning を使用します。たとえば、warning('off','backtrace') のようになります。

  • SuppressedWarningsFixture クラスを使用して警告を無効にします。

バージョン履歴

R2015b で導入