Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

编写基于函数的单元测试

创建测试函数

测试函数是一个 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 属性的示例,请参阅使用设置和拆解函数编写测试

文件脚手架函数.  使用文件脚手架函数可跨文件中的所有测试共享设置和拆解函数。文件脚手架函数的名称必须分别为 setupOnceteardownOnce。这些函数对每个文件执行一次。您可以使用文件脚手架在测试之前设置路径,然后在测试后将其重置为原始路径。这是骨架文件脚手架设置和拆解代码的典型示例。

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

刷新脚手架函数.   使用刷新脚手架函数可设置和拆解每个局部测试函数的状态。这些刷新脚手架函数的名称必须分别为 setupteardown。您可以使用刷新脚手架在测试之前获取新图窗并在测试之后关闭该图窗。这是骨架测试函数级别设置和拆解代码的典型示例。

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

运行测试

当您运行基于函数的测试时,测试框架会执行以下任务:

  1. 创建一组由局部测试函数指定的测试。

  2. 如果指定了 setupOnce 函数,请通过运行该函数来设置系统的预测试状态。

  3. 对于每个测试,运行对应的局部测试函数。如果指定了 setup 函数,请在运行局部测试函数之前运行它。如果指定了 teardown 函数,请在运行局部测试函数之后运行它。

  4. 如果指定了 teardownOnce 函数,请通过运行该函数将系统的预测试状态恢复为原始状态。

Workflow for running function-based tests

要在命令提示符下运行测试,请使用 runtests 函数并将 MATLAB 测试文件作为输入。例如:

results = runtests('exampleTest.m')

您也可以使用 run 函数运行测试。

results = run(exampleTest)

有关运行测试的详细信息,请参阅 runtests为各个工作流运行测试

分析结果

要分析测试结果,请检查 runtestsrun 的输出结构体。对于每个测试,结果中包含测试函数的名称(无论测试结果是通过、失败还是未完成)和运行测试所用的时间。有关详细信息,请参阅分析测试用例结果分析失败的测试结果

另请参阅

| |

相关主题