编写基于函数的单元测试
创建测试函数
测试函数是一个 MATLAB® 文件,其中包含主函数和您的各个局部测试函数。您也可以包括文件脚手架并刷新脚手架函数。文件脚手架包括跨文件中的所有测试共享的设置和拆解函数。这些函数对每个测试文件执行一次。刷新脚手架包括在每个局部测试函数之前和之后执行的设置和拆解函数。
创建主函数
主函数将所有局部测试函数收集到一个测试数组中。主函数的名称对应于测试文件的名称,并且应以单词“test”开始或结尾,且不区分大小写。如果文件名不以单词“test”开头或结尾,则在某些情况下,文件中的测试可能被忽略。在此示例中,MATLAB 文件为 exampleTest.m
。主函数需要调用 functiontests
以生成测试数组 tests
。使用 localfunctions
作为 functiontests
输入,以自动生成由文件中所有局部函数的函数句柄组成的元胞数组。这是典型的主函数。
function tests = exampleTest tests = functiontests(localfunctions); end
创建局部测试函数
各个测试函数作为局部函数包括在与主(测试生成)函数相同的 MATLAB 文件中。这些测试函数名称必须以不区分大小写的单词“test”开头和结尾。其中每个局部测试函数都必须接受单个输入,即函数测试用例对象 testCase
。测试框架自动生成此对象。有关创建测试函数的详细信息,请参阅使用函数编写简单测试用例和验证、断言及其他验证一览表。这是骨架局部测试函数的典型示例。
function testFunctionOne(testCase) % Test specific code end function testFunctionTwo(testCase) % Test specific code end
创建可选脚手架函数
设置和拆解代码也称为测试脚手架函数,用于设置系统的预测试状态并在运行测试后将其恢复为原始状态。这些函数有两种类型:文件脚手架函数和刷新脚手架函数,前者对每个测试文件运行一次,后者在每个局部测试函数之前和之后运行。这些函数不是生成测试必需的。通常,最好使用刷新脚手架而不是文件脚手架来增强单元测试封装。
函数测试用例对象 testCase
必须是文件脚手架和刷新脚手架函数的唯一输入。测试框架自动生成此对象。TestCase
对象是在设置函数、测试函数和拆解函数之间传递信息的一种方法。默认情况下,其 TestData
属性是一个 struct
,其允许轻松添加字段和数据。此测试数据的典型用法包括路径和图形句柄。有关使用 TestData
属性的示例,请参阅使用设置和拆解函数编写测试。
文件脚手架函数. 使用文件脚手架函数可跨文件中的所有测试共享设置和拆解函数。文件脚手架函数的名称必须分别为 setupOnce
和 teardownOnce
。这些函数对每个文件执行一次。您可以使用文件脚手架在测试之前设置路径,然后在测试后将其重置为原始路径。这是骨架文件脚手架设置和拆解代码的典型示例。
function setupOnce(testCase) % do not change function name % set a new path, for example end function teardownOnce(testCase) % do not change function name % change back to original path, for example end
刷新脚手架函数. 使用刷新脚手架函数可设置和拆解每个局部测试函数的状态。这些刷新脚手架函数的名称必须分别为 setup
和 teardown
。您可以使用刷新脚手架在测试之前获取新图窗并在测试之后关闭该图窗。这是骨架测试函数级别设置和拆解代码的典型示例。
function setup(testCase) % do not change function name % open a figure, for example end function teardown(testCase) % do not change function name % close figure, for example end
程序列出模板
%% Main function to generate tests function tests = exampleTest tests = functiontests(localfunctions); end %% Test Functions function testFunctionOne(testCase) % Test specific code end function testFunctionTwo(testCase) % Test specific code end %% Optional file fixtures function setupOnce(testCase) % do not change function name % set a new path, for example end function teardownOnce(testCase) % do not change function name % change back to original path, for example end %% Optional fresh fixtures function setup(testCase) % do not change function name % open a figure, for example end function teardown(testCase) % do not change function name % close figure, for example end
运行测试
当您运行基于函数的测试时,测试框架会执行以下任务:
创建一组由局部测试函数指定的测试。
如果指定了
setupOnce
函数,请通过运行该函数来设置系统的预测试状态。对于每个测试,运行对应的局部测试函数。如果指定了
setup
函数,请在运行局部测试函数之前运行它。如果指定了teardown
函数,请在运行局部测试函数之后运行它。如果指定了
teardownOnce
函数,请通过运行该函数将系统的预测试状态恢复为原始状态。
要在命令提示符下运行测试,请使用 runtests
函数并将 MATLAB 测试文件作为输入。例如:
results = runtests('exampleTest.m')
您也可以使用 run
函数运行测试。
results = run(exampleTest)
有关运行测试的详细信息,请参阅 runtests
和 为各个工作流运行测试。
分析结果
要分析测试结果,请检查 runtests
或 run
的输出结构体。对于每个测试,结果中包含测试函数的名称(无论测试结果是通过、失败还是未完成)和运行测试所用的时间。有关详细信息,请参阅分析测试用例结果和分析失败的测试结果。
另请参阅
runtests
| functiontests
| localfunctions