Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

関数を使用する単純なテスト ケースの記述

この例では、MATLAB® 関数 quadraticSolver.m のユニット テストを記述する方法を示します。

関数 quadraticSolver.m の作成

この MATLAB 関数は 2 次方程式を解きます。この関数は、MATLAB パス上のフォルダーに作成します。

function roots = quadraticSolver(a, b, c)
% quadraticSolver returns solutions to the 
% quadratic equation a*x^2 + b*x + c = 0.

if ~isa(a,'numeric') || ~isa(b,'numeric') || ~isa(c,'numeric')
    error('quadraticSolver:InputMustBeNumeric', ...
        'Coefficients must be numeric.');
end

roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a);

end

関数 solverTest の作成

この関数は、MATLAB パス上のフォルダーに作成します。

function tests = solverTest
tests = functiontests(localfunctions);
end

localfunctions を入力として functiontests を呼び出すことにより、solverTest.m ファイル内の各ローカル関数からテスト配列が作成されます。それぞれのテストは、関数名の先頭または最後に「test」を付けるという命名規則に準拠するローカル関数です。この命名規則に準拠していないローカル関数はテスト配列には含まれません。テスト関数は、テスト フレームワークから関数テスト ケース オブジェクトが渡される先となる単一の入力引数を受け入れなければなりません。関数はこのオブジェクトを検証、アサーション、仮定および致命的なアサーションに使用します。このオブジェクトに含まれている TestData 構造体によって、セットアップ関数、テスト関数および破棄関数の間でデータを渡すことが可能になります。

実数解のテスト関数の作成

テスト関数 testRealSolution を作成して、quadraticSolver が正しい実数解の値を返すかを検証します。たとえば、方程式 x2 - 3x + 2 = 0 には実数解 x = 1x = 2 があります。この関数は、この方程式の入力を指定して、quadraticSolver を呼び出します。予期される解 expSolution[2,1] です。

検定関数 verifyEqual を使用して、関数 actSolution の出力を予期される出力 expSolution と比較します。検定に失敗した場合、テストはフレームワークによって続行されます。通常、浮動小数点値に対して verifyEqual を使用する場合は、比較の許容誤差を指定します。詳細は、matlab.unittest.constraints を参照してください。

この関数を solverTest.m ファイルに追加します。

function testRealSolution(testCase)
actSolution = quadraticSolver(1,-3,2);
expSolution = [2 1];
verifyEqual(testCase,actSolution,expSolution)
end

虚数解のテスト関数の作成

quadraticSolver が正しい虚数解の値を返すかを検証するテストを作成します。たとえば、方程式 x2 + 2x + 10 = 0 には虚数解 x = -1 + 3ix = -1 - 3i があります。通常、浮動小数点値に対して verifyEqual を使用する場合は、比較の許容誤差を指定します。詳細は、matlab.unittest.constraints を参照してください。

この関数 testImaginarySolutionsolverTest.m ファイルに追加します。

function testImaginarySolution(testCase)
actSolution = quadraticSolver(1,2,10);
expSolution = [-1+3i -1-3i];
verifyEqual(testCase,actSolution,expSolution)
end

solverTest.m ファイル内のテストは完全に独立したテスト ケースであるため、順序は関係ありません。

関数 solverTest の保存

完成した solverTest.m テスト ファイルを以下に示します。このファイルは、MATLAB パス上のフォルダーに保存します。

function tests = solverTest
tests = functiontests(localfunctions);
end

function testRealSolution(testCase)
actSolution = quadraticSolver(1,-3,2);
expSolution = [2 1];
verifyEqual(testCase,actSolution,expSolution)
end

function testImaginarySolution(testCase)
actSolution = quadraticSolver(1,2,10);
expSolution = [-1+3i -1-3i];
verifyEqual(testCase,actSolution,expSolution)
end

関数 solverTest でのテストの実行

テストを実行します。

results = runtests('solverTest.m')
Running solverTest
..
Done solverTest
__________


results = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration

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

両方のテストが合格しました。

quadraticSolver.m へのエラーの挿入およびテストの実行

quadraticSolver.m 内の roots を実数にして、テストの 1 つが失敗するようにします。関数を終了する前に、次の行を追加します。roots = real(roots);(ただし、solverTest.m は変更しません)。ファイルを保存してテストを実行します。

results = runtests('solverTest.m')
Running solverTest
.
================================================================================
Verification failed in solverTest/testImaginarySolution.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> Complexity does not match.
        
        Actual Complexity:
            Real
        Expected Complexity:
            Complex
    
    Actual Value:
            -1    -1
    Expected Value:
         -1.000000000000000 + 3.000000000000000i -1.000000000000000 - 3.000000000000000i

    ------------------
    Stack Information:
    ------------------
    In C:\work\solverTest.m (testImaginarySolution) at 14
================================================================================
.
Done solverTest
__________

Failure Summary:

     Name                              Failed  Incomplete  Reason(s)
    ===============================================================================
     solverTest/testImaginarySolution    X                 Failed by verification.
    

results = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration

Totals:
   1 Passed, 1 Failed, 0 Incomplete.
   0.043751 seconds testing time.

虚数テストの検証が失敗しました。

quadraticSolver.m を元の状態に戻し、roots = real(roots); コードを削除してバージョンを修正します。

参考

関連するトピック