This example shows how to write unit tests for a MATLAB® function quadraticSolver
.
In a file in your current folder, create the function quadraticSolver
, which returns the roots of quadratic polynomials.
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
To test the quadraticSolver
function, create a test class by subclassing the matlab.unittest.TestCase
class. Add your tests inside a methods
block with the Test
attribute. The order of the tests within the block does not matter.
classdef SolverTest < matlab.unittest.TestCase methods (Test) end end
Create a test method testRealSolution
to verify that quadraticSolver
returns the correct solutions. For example, the equation has real solutions and . The method calls quadraticSolver
with the coefficients of this equation. Then, it uses the verifyEqual
method of matlab.unittest.TestCase
to compare the output of the function, actSolution
, to the desired output, expSolution
. If the qualification fails, test execution continues.
function testRealSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2,1]; testCase.verifyEqual(actSolution,expSolution) end
Create a test method testImaginarySolution
to verify that quadraticSolver
returns the correct imaginary solutions. For example, the equation has imaginary solutions and .
function testImaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i, -1-3i]; testCase.verifyEqual(actSolution,expSolution) end
Create a test method testNonNumericInput
to verify that quadraticSolver
produces an error for nonnumeric coefficients. Use the verifyError
method of matlab.unittest.TestCase
to test that the function throws the exception specified by the error identifier 'quadraticSolver:InputMustBeNumeric'
.
function testNonNumericInput(testCase) testCase.verifyError(@()quadraticSolver(1,'-3',2), ... 'quadraticSolver:InputMustBeNumeric') end
This code provides the complete contents of the SolverTest
class.
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
Run all of the tests in the SolverTest
class.
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.
Run the testRealSolution
method.
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.