编写单元测试的方法
要在代码功能中指导软件开发并监视回归,您可以为您的程序编写单元测试。MATLAB® 单元测试框架支持三种测试编写方案:
基于脚本的单元测试:将每个单元测试编写为测试脚本文件的一个单独的节。您可以执行基本鉴定,访问框架在测试结果上记录的诊断信息,通过选择要运行的测试来优化测试套件,以及通过创建和配置
TestRunner
对象来自定义测试运行。基于函数的单元测试:将每个单元测试编写为测试函数文件中的一个局部函数。基于函数的测试采用 xUnit 测试原理。除了支持基于脚本的测试所提供的功能之外,基于函数的测试还支持您访问一组丰富的测试编写功能。例如,您可以使用高级鉴定功能,包括约束、容差和测试诊断。
基于类的单元测试:将每个单元测试编写为类定义文件中的一个
Test
方法。除了支持基于脚本和基于函数的测试所提供的功能之外,基于类的测试还为您提供一些高级的测试编写功能,并支持您访问完整的框架功能。例如,您可以使用共享测试脚手架、参数化测试和重用测试内容。
基于脚本的单元测试
通过基于脚本的测试,您可以:
定义要在测试中共享的变量或测试所需的预条件。
使用
assert
函数执行基本鉴定。例如,您可以使用assert(isequal(actVal,expVal))
来断言实际值和预期值相等。(仅基于函数和基于类的测试支持高级鉴定功能。)访问框架记录的测试诊断。有关详细信息,请参阅以编程方式访问测试诊断。(仅基于函数和基于类的测试支持高级诊断操作。)
通常,使用基于脚本的测试,您可以创建测试文件并将文件名传递给 runtests
函数,而无需显式创建 Test
元素的套件。如果您创建了一个显式测试套件(使用 testsuite
函数或 matlab.unittest.TestSuite
类的方法),则基于脚本的测试中会提供其他功能。借助显式测试套件,您可以:
优化您的套件,例如,使用
matlab.unittest.selectors
命名空间中的类来优化套件。(一些选择器只适用于基于类的测试。)创建
TestRunner
对象,并对其进行自定义以运行您的测试。您可以将matlab.unittest.plugins
命名空间中的插件类添加到测试运行器中。
有关基于脚本的测试的详细信息,请参阅编写基于脚本的单元测试和扩展基于脚本的测试。
基于函数的单元测试
基于函数的测试支持基于脚本的测试所提供的功能。此外,通过基于函数的测试,您可以:
设置系统的预测试状态并在运行测试后将其恢复为原始状态。您可以对每个测试文件执行一次这些任务,或对每个单元测试执行一次。有关详细信息,请参阅使用设置和拆解函数编写测试。
使用
matlab.unittest.fixtures
命名空间中的脚手架类(使用applyFixture
方法)来处理常用测试动作的设置和拆解。使用
log
方法以一定的详细程度记录诊断信息。使用
matlab.unittest.qualifications
命名空间中的完整鉴定库。要确定应使用哪种鉴定,请参阅验证、断言及其他鉴定一览表。使用高级鉴定功能,包括约束、实际值代理、容差和测试诊断。您可以在鉴定中使用
matlab.unittest.constraints
命名空间中的类和从matlab.automation.diagnostics.Diagnostic
接口派生的类。
有关基于函数的测试的详细信息,请参阅编写基于函数的单元测试和扩展基于函数的测试。
基于类的单元测试
基于类的测试支持基于脚本和基于函数的测试所提供的功能。此外,通过基于类的测试,您可以:
使用设置和拆解方法块,用于隐式设置预测试环境状态并在运行测试后将其恢复为原始状态。有关详细信息,请参阅使用类来编写设置代码和拆解代码。
在类之间共享脚手架。有关详细信息,请参阅使用共享脚手架编写测试。
将测试划分为多个类别,然后运行具有指定标记的测试。有关详细信息,请参阅标记单元测试。
编写参数化测试,用于在指定的参数列表上合并和执行测试。有关详细信息,请参阅在基于类的测试中使用参数。
使用子类化和继承来共享和重用测试内容。例如,您可以通过派生子类来重用在测试类中定义的参数和方法。有关详细信息,请参阅Hierarchies of Classes — Concepts。
有关基于类的测试的详细信息,请参阅在 MATLAB 中编写基于类的单元测试。
扩展单元测试框架
单元测试框架使测试框架编写者能够通过自定义约束、诊断、脚手架和插件来扩展测试编写。例如,您可以创建一个自定义插件,并在运行基于脚本、基于函数或基于类的单元测试时使用它来扩展测试运行器。有关详细信息,请参阅扩展测试框架。