Main Content

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

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

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

関数 quadraticSolver の作成

現在のフォルダー内のファイルに、2 次多項式の根を返す関数 quadraticSolver を作成します。

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 クラスの作成

関数 quadraticSolver をテストするには、matlab.unittest.TestCase クラスをサブクラス化してテスト クラスを作成します。Test 属性を指定して methods ブロック内にテストを追加します。ブロック内のテストの順序は重要ではありません。

classdef SolverTest < matlab.unittest.TestCase

    methods (Test)

    end

end

実数解のテスト メソッドの作成

quadraticSolver が正しい解を返すことを検証するテスト メソッド testRealSolution を作成します。たとえば、方程式 x2-3x+2=0 には実数解 x=1x=2 があります。メソッドは、この方程式の係数を指定して quadraticSolver を呼び出します。次に、matlab.unittest.TestCase のメソッド verifyEqual を使用して、関数 actSolution の出力と必要な出力 expSolution を比較します。検定が失敗した場合、引き続きテストが実行されます。

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

虚数解のテスト メソッドの作成

quadraticSolver が正しい虚数解を返すことを検定するテスト メソッド testImaginarySolution を作成します。たとえば、方程式 x2-2x+10=0 には虚数解 x=-1+3ix=-1-3i があります。

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

エラー条件用テスト メソッドの作成

quadraticSolver が非数の係数についてエラーを出力することを検証するテスト メソッド testNonNumericInput を作成します。matlab.unittest.TestCaseverifyError メソッドを使用して、エラー識別子 'quadraticSolver:InputMustBeNumeric' で指定された例外を関数がスローすることをテストします。

function testNonNumericInput(testCase)
    testCase.verifyError(@()quadraticSolver(1,'-3',2), ...
        'quadraticSolver:InputMustBeNumeric')
end

SolverTest クラス定義の概要

以下のコードは、SolverTest クラスの内容全体を提示します。

classdef SolverTest < matlab.unittest.TestCase
    methods(Test)
        function testRealSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2,1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function testImaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i, -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function testNonNumericInput(testCase)
            testCase.verifyError(@()quadraticSolver(1,'-3',2), ...
                'quadraticSolver:InputMustBeNumeric')
        end
    end
end

SolverTest クラス内のテストの実行

SolverTest クラス内のすべてのテストを実行します。

testCase = SolverTest;
res = run(testCase)
Running SolverTest
...
Done SolverTest
__________
res = 
  1×3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   3 Passed, 0 Failed, 0 Incomplete.
   1.4335 seconds testing time.

単一のテスト メソッドの実行

testRealSolution メソッドを実行します。

testCase = SolverTest;
res = run(testCase,'testRealSolution')
Running SolverTest
.
Done SolverTest
__________
res = 
  TestResult with properties:

          Name: 'SolverTest/testRealSolution'
        Passed: 1
        Failed: 0
    Incomplete: 0
      Duration: 0.0142
       Details: [1×1 struct]

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

関連するトピック