使用类来编写简单测试用例
您可以通过在继承自 matlab.unittest.TestCase
类的测试类中定义单元测试来测试您的 MATLAB® 程序。基于类的测试中的单元测试是确定软件单元正确性的一种方法。它是在具有 Test
属性的 methods
代码块中定义的,可以使用鉴定来测试值和对失败进行响应。有关基于类的测试的详细信息,请参阅在 MATLAB 中编写基于类的单元测试。
此示例说明如何编写基于类的单元测试来验证在当前文件夹的文件中定义的函数的正确性。quadraticSolver
函数接受二次多项式的系数作为输入,并返回该多项式的根。如果系数指定为非数值,该函数将引发错误。
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
代码块中添加三个单元测试。这些单元测试针对实数解、虚数解和错误条件来测试 quadraticSolver
函数。每个 Test
方法必须接受 TestCase
实例作为输入。测试在该块中的顺序无关紧要。
首先,创建一个 Test
方法 realSolution
,以验证 quadraticSolver
返回特定系数的正确实数解。例如,方程 有实数解 和 。该方法使用此方程的系数调用 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
创建另一个 Test
方法 imaginarySolution
,以验证 quadraticSolver
返回特定系数的正确虚数解。例如,方程 有虚数解 和 。就像前面的方法一样,此方法用此方程的系数调用 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
最后,添加 Test
方法 nonnumericInput
,以验证 quadraticSolver
是否对非数值系数生成错误。使用 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
方法。在此示例中,所有三个测试都通过。
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.