在 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 种鉴定方法。例如,使用 verifyClass
或 assertClass
测试某值是否属于预期的类,可以使用 assumeTrue
或 fatalAssertTrue
测试实际值是否为 true。有关鉴定方法的汇总,请参阅验证、断言及其他鉴定一览表。
通常,每个单元测试函数都会通过执行您要测试的代码获取一个实际值,并定义与之关联的预期值。例如,如果您要测试 plus
函数,实际值可能是 plus(2,3)
,预期值是 5
。在测试函数内,您将实际值和预期值传递给鉴定方法。例如:
testCase.verifyEqual(plus(2,3),5)
有关基本单元测试的示例,请参阅使用类来编写简单测试用例。
高级测试类的其他功能
MATLAB 单元测试框架提供了用于编写更多高级测试类的一些功能:
设置和拆解方法块,用于隐式设置系统的预测试状态并在运行测试后将其恢复为原始状态。有关设置和拆解代码的测试类示例,请参阅使用类来编写设置代码和拆解代码。
高级鉴定功能,包括实际值代理、测试诊断和约束接口。有关详细信息,请参阅
matlab.unittest.constraints
和matlab.automation.diagnostics.Diagnostic
。即用型脚手架,用于处理常用测试动作的设置和拆解以及在类之间共享脚手架。有关详细信息,请参阅
matlab.unittest.fixtures
和 使用共享脚手架编写测试。创建自定义测试脚手架的能力。有关详细信息,请参阅创建基本自定义脚手架和创建高级自定义脚手架。