本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

使用类来编写简单测试用例

此示例说明如何编写 MATLAB® 函数 quadraticSolver.m 的单元测试。

创建 quadraticSolver.m 函数

以下 MATLAB 函数求二次方程的解。在您的 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.unittest 框架,请以测试用例(从 matlab.unittest.TestCase 派生的一个类)的形式编写 MATLAB 函数(测试)。

创建一个子类 SolverTest


% Copyright 2015 The MathWorks, Inc.

classdef SolverTest < matlab.unittest.TestCase

    methods (Test)

    end

end

以下步骤显示如何创建特定测试。使用 (Test) 属性将这些测试放在 methods 块内。

创建实数解的测试方法

创建一个测试方法 testRealSolution 以验证 quadraticSolver 是否返回实数解的正确值。例如,方程 $x^{2} - 3x + 2 = 0$ 有实数解 $x = 1$$x = 2$。此方法使用此方程的输入调用 quadraticSolver。解 expSolution[2,1]

使用 matlab.unittest.TestCase 方法 verifyEqual 将函数的输出 actSolution 与所需的输出 expSolution 进行比较。如果验证失败,则继续执行测试。


% Copyright 2015 The MathWorks, Inc.

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

将此函数添加到 methods (Test) 块内。

创建虚数解的测试方法

创建一个测试以验证 quadraticSolver 是否返回虚数解的正确值。例如,方程 $x^{2} - 2x + 10 = 0$ 有虚数解 $x = -1 + 3i$$x = -1 - 3i$。将此函数 testImaginarySolution 添加到 methods (Test) 块内。


% Copyright 2015 The MathWorks, Inc.

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

测试在该块中的顺序无关紧要。

保存类定义

以下是完整的 SolverTest 类定义。将此文件保存在您的 MATLAB 路径上的一个文件夹中。

classdef SolverTest < matlab.unittest.TestCase
    % SolverTest tests solutions to the quadratic equation
    % a*x^2 + b*x + c = 0
    
    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
    end
    
end 

运行 SolverTest 测试用例中的测试

运行 SolverTest 类定义文件中的所有测试。

testCase = SolverTest;
res = run(testCase)
Running SolverTest
..
Done SolverTest
__________


res = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.55494 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.0120
       Details: [1x1 struct]

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

相关主题