Main Content

MATLAB 中编写基于类的单元测试

要测试 MATLAB® 程序,可使用鉴定机制来编写单元测试,这些鉴定是用于测试值和对失败进行响应的方法。

测试类定义

测试类必须从 matlab.unittest.TestCase 继承并包含具有 Test 属性的 methods 代码块。methods 块包含函数,其中每个函数是一个单元测试。以下是一个常规的基本类定义。

%% Test Class Definition
classdef MyComponentTest < matlab.unittest.TestCase
   
    %% Test Method Block
    methods (Test)
        % includes unit test functions
    end
end

单元测试

单元测试是确定软件单元正确性的方法。每个单元测试都包含在方法块内。函数必须接受 TestCase 实例作为输入。

%% Test Class Definition
classdef MyComponentTest < matlab.unittest.TestCase
    
    %% Test Method Block
    methods (Test)
        
        %% Test Function
        function testASolution(testCase)      
            %% Exercise function under test
            % act = the value from the function under test

            %% Verify using test qualification
            % exp = your expected value
            % testCase.<qualification method>(act,exp);
        end
    end
end

鉴定是用于测试值和对失败进行响应的方法。下表列出了鉴定的类型。

验证

使用此鉴定在不引发异常的条件下生成和记录失败。将继续运行完成其余测试。

matlab.unittest.qualifications.Verifiable
假设

使用此鉴定机制确保仅当满足特定先决条件时才运行测试。但其实在不满足此先决条件的情况下执行测试也不会导致测试失败。发生假设失败时,测试框架将测试标记为已滤除。

matlab.unittest.qualifications.Assumable
断言

使用此鉴定机制确保满足当前测试的先决条件。

matlab.unittest.qualifications.Assertable
致命断言

当断言点处的失败使得当前测试方法的其余部分无效或者状态不可恢复时,使用此鉴定机制。

matlab.unittest.qualifications.FatalAssertable

MATLAB 单元测试框架为每类鉴定机制提供了约 25 种鉴定方法。例如,使用 verifyClassassertClass 测试某值是否属于预期的类,可以使用 assumeTruefatalAssertTrue 测试实际值是否为 true。有关鉴定方法的汇总,请参阅验证、断言及其他鉴定一览表

通常,每个单元测试函数都会通过执行您要测试的代码获取一个实际值,并定义与之关联的预期值。例如,如果您要测试 plus 函数,实际值可能是 plus(2,3),预期值是 5。在测试函数内,您将实际值和预期值传递给鉴定方法。例如:

testCase.verifyEqual(plus(2,3),5)

有关基本单元测试的示例,请参阅使用类来编写简单测试用例

高级测试类的其他功能

MATLAB 单元测试框架提供了用于编写更多高级测试类的一些功能:

相关主题