クラスを使用する単純なテスト ケースの記述
matlab.unittest.TestCase
クラスから継承するテスト クラス内でユニット テストを定義して MATLAB® プログラムをテストできます。クラスベースのテストのユニット テストは、1 単位のソフトウェアの正確性を判定するメソッドです。methods
ブロック内で Test
属性を指定して定義され、値をテストしてエラーに対応するための検定を使用できます。クラスベースのテストの詳細については、MATLAB でのクラスベースのユニット テストの作成を参照してください。
この例では、現在のフォルダー内のファイルで定義された関数の正確性を検定するクラスベースのユニット テストを記述する方法を示します。関数 quadraticSolver
は、2 次多項式の係数を入力として受け取り、その多項式の根を返します。係数を非数値として指定した場合、関数はエラーをスローします。
function r = 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 r(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a); r(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a); end
SolverTest クラスの作成
現在のフォルダー内の SolverTest.m
という名前のファイルで、matlab.unittest.TestCase
クラスをサブクラス化して SolverTest
クラスを作成します。このクラスが関数 quadraticSolver
のテストの場所になります。Test
属性を指定して methods
ブロック内に 3 つのユニット テストを追加します。このそれぞれで関数 quadraticSolver
の実数解、虚数解、およびエラー条件についてのテストを行います。各 Test
メソッドは入力として TestCase
インスタンスを受け入れなければなりません。ブロック内のテストの順序は重要ではありません。
最初に、quadraticSolver
が特定の係数に対して正しい実数解を返すことを検証する Test
メソッド realSolution
を作成します。たとえば、方程式 には実数解 と があります。メソッドは、この方程式の係数を指定して quadraticSolver
を呼び出します。次に、matlab.unittest.TestCase
の verifyEqual
メソッドを使用して、実際の出力 actSolution
を想定される出力 expSolution
と比較します。
classdef SolverTest < matlab.unittest.TestCase methods(Test) function realSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2 1]; testCase.verifyEqual(actSolution,expSolution) end end end
quadraticSolver
が特定の係数に対して正しい虚数解を返すことを検証する 2 つ目の Test
メソッド imaginarySolution
を作成します。たとえば、方程式 には虚数解 と があります。このメソッドで、前のメソッドと同じように、この方程式の係数を指定して quadraticSolver
を呼び出し、verifyEqual
メソッドを使用して実際の出力 actSolution
を想定される出力 expSolution
と比較します。
classdef SolverTest < matlab.unittest.TestCase methods(Test) function realSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2 1]; testCase.verifyEqual(actSolution,expSolution) end function imaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i -1-3i]; testCase.verifyEqual(actSolution,expSolution) end end end
最後に、quadraticSolver
が数値以外の係数に対してエラーを生成することを検証する Test
メソッド nonnumericInput
を追加します。matlab.unittest.TestCase
の verifyError
メソッドを使用して、入力 1
、'-3'
、および 2
を指定して関数を呼び出した場合に 'quadraticSolver:InputMustBeNumeric'
で指定したエラーがスローされることをテストします。
classdef SolverTest < matlab.unittest.TestCase methods(Test) function realSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2 1]; testCase.verifyEqual(actSolution,expSolution) end function imaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i -1-3i]; testCase.verifyEqual(actSolution,expSolution) end function nonnumericInput(testCase) testCase.verifyError(@()quadraticSolver(1,'-3',2), ... 'quadraticSolver:InputMustBeNumeric') end end end
SolverTest クラス内のテストの実行
SolverTest
クラス内のすべてのテストを実行するには、クラスから TestCase
オブジェクトを作成し、そのオブジェクトで run
メソッドを呼び出します。この例では、3 つのすべてのテストにパスします。
testCase = SolverTest; results = testCase.run
Running SolverTest ... Done SolverTest __________
results = 1×3 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 3 Passed, 0 Failed, 0 Incomplete. 0.018753 seconds testing time.
いずれかの Test
メソッドを指定して単一のテストを実行することもできます。特定の Test
メソッドを実行するには、メソッドの名前を run
に渡します。たとえば、realSolution
メソッドを実行します。
result = run(testCase,'realSolution')
Running SolverTest . Done SolverTest __________
result = TestResult with properties: Name: 'SolverTest/realSolution' Passed: 1 Failed: 0 Incomplete: 0 Duration: 0.0026 Details: [1×1 struct] Totals: 1 Passed, 0 Failed, 0 Incomplete. 0.0026009 seconds testing time.