runtests
运行一组测试
语法
说明
运行当前文件夹中的所有测试,并返回测试结果。 testResults
= runtests
运行指定的测试。testResults
= runtests(tests
)
支持上述语法中的任何输入参量组合,且可使用一个或多个名称-值参量指定选项。例如,testResults
= runtests(___,Name,Value
)testResults = runtests("IncludeSubfolders",true)
运行当前文件夹及其任何子文件夹中的所有测试。
当您指定 ReportCoverageFor
名称-值参量时,[
也会返回代码覆盖率分析的结果。 (自 R2023b 起)testResults
,coverageResults
] = runtests(___)
示例
运行工作文件夹中的测试
在当前工作文件夹中创建一个文件夹 myExample
,并进入该文件夹。
在 myExample
文件夹中,创建一个测试脚本 typeTest.m
。
%% Test double class exp = 'double'; act = ones; assert(isa(act,exp)) %% Test single class exp = 'single'; act = ones('single'); assert(isa(act,exp)) %% Test uint16 class exp = 'uint16'; act = ones('uint16'); assert(isa(act,exp))
在 myExample
文件夹中,创建一个测试脚本 sizeValueTest.m
。
%% Test size exp = [7 13]; act = ones([7 13]); assert(isequal(size(act),exp)) %% Test values act = ones(42); assert(unique(act) == 1)
运行当前文件夹中的所有测试。
runtests
Running sizeValueTest .. Done sizeValueTest __________ Running typeTest ... Done typeTest __________ ans = 1x5 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 5 Passed, 0 Failed, 0 Incomplete. 0.038077 seconds testing time.
MATLAB® 运行了 5 个测试。2 个测试通过 sizeValueTest
,3 个测试通过 typeTest
。
使用文件名运行测试
创建如下所示的测试文件,并将其保存为 MATLAB 路径上的 runtestsExampleTest.m
。
function tests = runtestsExampleTest tests = functiontests(localfunctions); function testFunctionOne(testCase)
运行测试。
results = runtests('runtestsExampleTest.m');
Running runtestsExampleTest . Done runtestsExampleTest __________
运行子文件夹中的测试
如果该文件不存在,请根据前面的示例创建 runtestsExampleTest.m
测试文件。
创建一个子文件夹 tmpTest
,并在该文件夹中创建以下 runtestsExampleSubfolderTest.m
测试文件。
function tests = runtestsExampleSubfolderTest tests = functiontests(localfunctions); function testFunctionTwo(testCase)
通过将 IncludeSubfolders
指定为 true
,从上述文件夹 tmpTest
中运行这些测试。runtests
函数同时在当前文件夹和子文件夹中运行这些测试。
results = runtests(pwd,"IncludeSubfolders",true);
Running runtestsExampleTest . Done runtestsExampleTest __________ Running runtestsExampleSubFolderTest . Done runtestsExampleSubFolderTest __________
如果不指定 IncludeSubfolders
名称-值参量,runtests
不会在子文件夹中运行测试。
results = runtests(pwd);
Running runtestsExampleTest . Done runtestsExampleTest __________
在工程中运行测试
如果您的当前文件夹是工程根文件夹,或您将工程根文件夹的路径传递给 runtests
函数,则 runtests
会运行指定工程中标有 Test
分类的所有测试文件。
此示例假设 C:\projects\project1
处的工程文件夹包含标有 Test
分类的测试文件。将当前文件夹更改为工程根文件夹,并在工程中运行测试。
cd 'C:\projects\project1'
runtests
您也可以通过打开 project1
来运行测试。完成后关闭工程。
proj = openProject('C:\projects\project1');
runtests
close(proj)
另一种方法是,通过将工程根文件夹的完整路径传递给 runtests
,在工程中运行测试。
runtests('C:\projects\project1')
并行运行测试
在当前文件夹中名为 runInParallelTest.m
的文件中创建此基于函数的测试。
function tests = runInParallelTest tests = functiontests(localfunctions); function testA(testCase) verifyEqual(testCase,5,5); function testB(testCase) verifyTrue(testCase,logical(1)); function testC(testCase) verifySubstring(testCase,'SomeLongText','Long'); function testD(testCase) verifySize(testCase,ones(2,5,3),[2 5 3]); function testE(testCase) verifyGreaterThan(testCase,3,2); function testF(testCase) verifyEmpty(testCase,{},'Cell array is not empty.'); function testG(testCase) verifyMatches(testCase,'Some Text','Some [Tt]ext');
并行运行测试。并行运行测试需要 Parallel Computing Toolbox™。测试框架可能会改变组的顺序和数量,或每个组中所包含的测试。
results = runtests("runInParallelTest.m","UseParallel",true);
Split tests into 7 groups and running them on 4 workers. ---------------- Finished Group 2 ---------------- Running runInParallelTest . Done runInParallelTest __________ ---------------- Finished Group 3 ---------------- Running runInParallelTest . Done runInParallelTest __________ ---------------- Finished Group 1 ---------------- Running runInParallelTest . Done runInParallelTest __________ ---------------- Finished Group 4 ---------------- Running runInParallelTest . Done runInParallelTest __________ ---------------- Finished Group 6 ---------------- Running runInParallelTest . Done runInParallelTest __________ ---------------- Finished Group 5 ---------------- Running runInParallelTest . Done runInParallelTest __________ ---------------- Finished Group 7 ---------------- Running runInParallelTest . Done runInParallelTest __________
运行所选参数化测试
在您的工作文件夹中,创建 testZeros.m
。该类包含四种测试方法。
classdef testZeros < matlab.unittest.TestCase properties (TestParameter) type = {'single','double','uint16'}; outSize = struct('s2d',[3 3], 's3d',[2 5 4]); end methods (Test) function testClass(testCase, type, outSize) testCase.verifyClass(zeros(outSize,type), type); end function testSize(testCase, outSize) testCase.verifySize(zeros(outSize), outSize); end function testDefaultClass(testCase) testCase.verifyClass(zeros, 'double'); end function testDefaultSize(testCase) testCase.verifySize(zeros, [1 1]); end function testDefaultValue(testCase) testCase.verifyEqual(zeros,0); end end end
完整测试套件包含 11 个测试元素:6 来自 testClass
方法,2 个来自 testSize
方法,1 个分别来自 testDefaultClass
、testDefaultSize
和 testDefaultValue
方法。
在命令提示符下,运行 testSize
方法的所有参数化。
runtests('testZeros/testSize')
Running testZeros .. Done testZeros __________ ans = 1x2 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 2 Passed, 0 Failed, 0 Incomplete. 0.050904 seconds testing time.
runtests
函数从 testSize
方法执行两个参数化测试。您也可以使用 runtests('testZeros','ProcedureName','testSize')
指定测试过程名称。
运行使用 outSize
参数属性的测试元素。
runtests('testZeros','ParameterProperty','outSize')
Running testZeros ........ Done testZeros __________ ans = 1x8 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 8 Passed, 0 Failed, 0 Incomplete. 0.066375 seconds testing time.
runtests
函数执行了八个使用 outSize
参数属性的测试:六个来自 testClass
方法,两个来自 testSize
方法。
运行使用 single
参数名称的测试元素。
runtests('testZeros','ParameterName','single')
Running testZeros .. Done testZeros __________ ans = 1x2 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 2 Passed, 0 Failed, 0 Incomplete. 0.012586 seconds testing time.
runtests
函数执行了两个来自 testClass
方法并使用 outSize
参数名称的测试。
检索代码覆盖率信息
自 R2023b 起
使用 runtests
函数运行您的测试并收集代码覆盖率结果。
在当前文件夹内一个名为 quadraticSolver.m
的文件中创建 quadraticSolver
函数。该函数接受二次多项式的系数作为输入,并返回该多项式的根。如果系数指定为非数值,该函数将引发错误。
function roots = quadraticSolver(a,b,c) % quadraticSolver returns solutions to the % quadratic equation a*x^2 + b*x + c = 0. if ~isa(a,"numeric") || ~isa(b,"numeric") || ~isa(c,"numeric") error("quadraticSolver:InputMustBeNumeric", ... "Coefficients must be numeric.") end roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a); roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a); end
要测试 quadraticSolver
函数,请在当前文件夹内名为 SolverTest.m
的文件中创建 SolverTest
类。针对实数解、虚数解和非数值输入定义三个 Test
方法来测试该函数。
classdef SolverTest < matlab.unittest.TestCase methods (Test) function realSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2 1]; testCase.verifyEqual(actSolution,expSolution) end function imaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i -1-3i]; testCase.verifyEqual(actSolution,expSolution) end function nonnumericInput(testCase) testCase.verifyError(@()quadraticSolver(1,"-3",2), ... "quadraticSolver:InputMustBeNumeric") end end end
运行 SolverTest
类中的测试,并通过指定 ReportCoverageFor
名称-值参量来执行代码覆盖率分析。除了生成代码覆盖率报告之外,要以编程方式访问覆盖率结果,请使用两个输出参量调用 runtests
函数。测试运行后,第一个输出包含测试结果,第二个输出包含覆盖率结果。
[testResults,coverageResults] = runtests("SolverTest", ... "ReportCoverageFor","quadraticSolver.m")
Running SolverTest ... Done SolverTest __________ MATLAB code coverage report has been saved to: C:\Temp\tpf83a0edb_55fb_4039_84f8_230a01d5f591\index.html testResults = 1×3 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 3 Passed, 0 Failed, 0 Incomplete. 1.8685 seconds testing time. coverageResults = Result with properties: Filename: "C:\work\quadraticSolver.m" CreationDate: 16-May-2023 15:11:20 Coverage summary (use generateHTMLReport to generate an HTML report): Function: 1/1 (100%) Statement: 4/4 (100%) Use coverageSummary to retrieve information from the coverage results.
输入参数
tests
— 测试
字符串数组 | 字符向量 | 字符向量元胞数组
测试,指定为字符串数组、字符向量或字符向量元胞数组。使用此参量指定测试内容。例如,您可以指定测试文件、测试类、包含测试文件的文件夹、包含测试类的包或包含测试文件的工程文件夹。
示例: runtests("myTestFile.m")
示例: runtests(["myTestFile/test1" "myTestFile/test3"])
示例: runtests("mypackage.MyTestClass")
示例: runtests(pwd)
示例: runtests({'mypackage.MyTestClass','myTestFile.m',pwd,'mypackage.subpackage'})
示例: runtests("C:\projects\project1")
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: results = runtests(tests,Name="productA_*")
运行名称以 "productA_"
开头的 Test
元素。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: results = runtests(tests,"Name","productA_*")
运行名称以 "productA_"
开头的 Test
元素。
IncludeSubfolders
— 是否运行子文件夹中的测试
false
或 0
(默认) | true
或 1
是否在子文件夹中运行测试,指定为数值或逻辑值 0
(false
) 或 1
(true
)。默认情况下,框架只运行指定文件夹(而不包含其子文件夹)中的测试。
IncludeSubpackages
— 是否运行子包中的测试
false
或 0
(默认) | true
或 1
是否在子包中运行测试,指定为数值或逻辑值 0
(false
) 或 1
(true
)。默认情况下,框架只运行指定包(而不包含其子包)中的测试。
IncludeReferencedProjects
— 是否包含来自引用工程的测试
false
或 0
(默认) | true
或 1
是否包含来自引用工程的测试,指定为数值或逻辑值 0
(false
) 或 1
(true
)。有关引用工程的详细信息,请参阅大型工程组件化。
InvalidFileFoundAction
— 对无效测试文件采取的操作
"warn"
(默认) | "error"
对函数正在处理的文件夹或包中的无效测试文件采取的操作,指定为 "warn"
或 "error"
。
"warn"
- 该函数对文件夹或包中的每个无效测试文件发出警告,并在有效文件中运行测试。"error"
- 如果该函数在文件夹或包中发现无效的测试文件,将会引发错误。
无效的测试文件是框架无法运行的测试文件。示例包括:包含语法错误的测试文件、基于函数但缺失局部函数的测试文件,以及具有 Test
方法但向该方法传递了未定义的参数化属性的文件。
BaseFolder
— 基本文件夹的名称
字符串数组 | 字符向量 | 字符向量元胞数组
包含测试文件的基本文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素必须包含在 BaseFolder
指定的基本文件夹之一中。如果没有 Test
元素与基本文件夹匹配,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
对于包中定义的测试文件,基本文件夹是顶级包文件夹的父级。
DependsOn
— 包含源代码的文件和文件夹的名称
字符串向量 | 字符向量 | 字符向量元胞向量
包含源代码的文件和文件夹的名称,指定为字符串向量、字符向量或字符向量元胞向量。此参量过滤测试套件。为了使测试框架在过滤后的套件中包括测试,定义测试的文件必须依赖指定的源代码。如果没有测试文件依赖源代码,则返回空测试套件。
指定的值必须表示至少一个具有 .m
、.p
、.mlx
、.mlapp
、.mat
或 .slx
扩展名的现有文件。无法用不支持的扩展名显式指定文件名。如果指定文件夹名称,框架将提取该文件夹中受支持文件的路径。
您必须有 MATLAB® Test™ 许可证才能使用 DependsOn
。有关通过源代码依存关系选择测试的详细信息,请参阅 matlabtest.selectors.DependsOn
(MATLAB Test)。
示例: DependsOn=["myFile.m" "myFolder"]
示例: DependsOn=["folderA" "C:\work\folderB"]
Name
— 测试名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Name
属性必须匹配 Name
指定的名称之一。如果 Test
元素都没有匹配的名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
对于一个给定的测试文件,测试的名称唯一地标识测试内容的最小可运行部分。测试名称包括包名称、文件名(不包括扩展名)、过程名称和关于参数化的信息。
ParameterProperty
— 参数化属性的名称
字符串数组 | 字符向量 | 字符向量元胞数组
定义测试使用的参数的测试类属性的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Parameterization
属性必须包含 ParameterProperty
指定的至少一个属性名称。如果 Test
元素都没有匹配的属性名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
ParameterName
— 参数名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试使用的参数的名称,指定为字符串数组、字符向量或字符向量元胞数组。MATLAB 根据定义参数的测试类属性生成参数名称:
如果属性值是元胞数组,则 MATLAB 根据元胞数组元素的值、类型和维度,基于元胞数组的元素生成参数名称。
如果属性值是结构体,则 MATLAB 将根据结构体字段生成参数名称。
ParameterName
参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Parameterization
属性必须包含 ParameterName
指定的至少一个参数名称。如果 Test
元素都没有匹配的参数名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
ProcedureName
— 测试过程的名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试过程的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 ProcedureName
属性必须匹配 ProcedureName
指定的过程名称之一。如果 Test
元素都没有匹配的过程名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
在基于类的测试中,测试过程的名称是包含该测试的 Test
方法的名称。在基于函数的测试中,它是包含测试的局部函数的名称。在基于脚本的测试中,它是从测试部分标题生成的名称。与测试套件元素的名称不同,测试过程的名称不包括任何包名称、文件名或关于参数化的信息。
Superclass
— 派生测试类的父类的名称
字符串数组 | 字符向量 | 字符向量元胞数组
派生测试类的父类的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 TestClass
属性必须指向从 Superclass
指定的类之一派生的一个测试类。如果没有 Test
元素与类匹配,将返回空测试套件。
Tag
— 标记的名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试使用的标记的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Tags
属性必须包含 Tag
指定的至少一个标记名称。如果 Test
元素都没有匹配的标记名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
Strict
— 是否应用严格的检查
false
或 0
(默认) | true
或 1
运行测试时是否应用严格检查,指定为数值或逻辑值 0
(false
) 或 1
(true
)。例如,如果测试发出警告,框架会生成鉴定失败。
UseParallel
— 是否并行运行测试
false
或 0
(默认) | true
或 1
是否并行运行测试,指定为数值或逻辑值 0
(false
) 或 1
(true
)。
默认情况下,runtests
串行运行测试。如果您将 UseParallel
指定为 true
,则 runtests
将测试套件分成组,并在以下情况下并行运行这些组:
安装了 Parallel Computing Toolbox。
存在一个打开的并行池,或者在 Parallel Preferences 中启用了自动池创建。
否则,runtests
以串行方式运行测试,而不管 UseParallel
的值是什么。
并行测试可能与其他选项不兼容。例如,如果 UseParallel
和 Debug
都指定为 true
,则以串行方式运行测试。当并行运行测试时,测试框架可能会改变组的顺序和数量,或每个组中所包含的测试。
Debug
— 是否应用调试功能
false
或 0
(默认) | true
或 1
运行测试时是否应用调试功能,指定为数值或逻辑值 0
(false
) 或 1
(true
)。例如,如果发生测试失败,框架将暂停执行测试以进入调试模式。
OutputDetail
— 事件详细信息的显示级别
0 | 1 | 2 | 3 | 4 | matlab.automation.Verbosity
枚举
事件详细信息的显示级别,指定为介于 0 和 4 之间的整数值或 matlab.automation.Verbosity
枚举对象。整数值对应于 matlab.automation.Verbosity
枚举的成员。
runtests
函数使用 OutputDetail
指定的信息量来显示失败事件和日志记录事件。默认情况下,runtests
显示 matlab.automation.Verbosity.Detailed
级别(级别 3)的失败事件和记录的事件,以及 matlab.automation.Verbosity.Concise
级别(级别 2)的测试运行进度。
数值表示 | 枚举成员名称 | 详细程度描述 |
---|---|---|
0 | None | 无信息 |
1 | Terse | 最少的信息 |
2 | Concise | 适中信息量 |
3 | Detailed | 部分补充信息 |
4 | Verbose | 大量补充信息 |
LoggingLevel
— 记录诊断信息的最高详细级别
1 (默认) | 0 | 2 | 3 | 4 | matlab.automation.Verbosity
枚举
针对测试运行包含所记录诊断信息的最高详细级别,指定为介于 0 和 4 之间的整数值或 matlab.automation.Verbosity
枚举对象。runtests
函数包含在此级别和更低级别记录的诊断信息。整数值对应于 matlab.automation.Verbosity
枚举的成员。
默认情况下,runtests
包含在 matlab.automation.Verbosity.Terse
级别(级别 1)记录的诊断信息。要排除所记录的诊断信息,请将 LoggingLevel
指定为 Verbosity.None
(级别 0)。
记录的诊断信息是您通过调用 log (TestCase)
或 log (Fixture)
方法提供给测试框架的诊断信息。
数值表示 | 枚举成员名称 | 详细程度描述 |
---|---|---|
0 | None | 无信息 |
1 | Terse | 最少的信息 |
2 | Concise | 适中信息量 |
3 | Detailed | 部分补充信息 |
4 | Verbose | 大量补充信息 |
ReportCoverageFor
— 用于代码覆盖率分析的源文件和文件夹的名称
字符串数组 | 字符向量 | 字符向量元胞数组
用于代码覆盖率分析的源文件和文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。如果指定相对路径,则该路径必须在当前文件夹中。否则,您必须指定完整路径。您可以指定具有 .m
、.mlx
或 .mlapp
扩展名的文件夹或文件的路径。
当您指定此参量时,此函数将运行您的测试,并为指定的源代码生成 HTML 代码覆盖率报告。该报告显示由测试执行的源代码的对应部分。如果除了 ReportCoverageFor
之外还指定 coverageResults
输出参量 (自 R2023b 起),则该函数除了生成 HTML 代码覆盖率报告之外,还允许以编程方式访问覆盖率结果。
示例: "ReportCoverageFor",pwd
示例: "ReportCoverageFor",["myFile.m" "myFolder"]
示例: "ReportCoverageFor",["folderA" "C:\work\folderB"]
GenerateBaselines
— 是否创建或更新基线数据
false
或 0
(默认) | true
或 1
是否创建或更新在使用特定鉴定方法的测试中使用的 MAT 文件,指定为数值或逻辑值 0
(false
) 或 1
(true
)。您必须安装 Simulink® Test 才能使用 GenerateBaselines
。
当您将此参量指定为 true
时,您的测试必须使用 sltest.TestCase
(Simulink Test) 类的下列鉴定方法中的至少一个:
verifySignalsMatch
(例如,testCase.verifySignalsMatch(actVal,"myBaseline.mat")
)assumeSignalsMatch
assertSignalsMatch
fatalAssertSignalsMatch
有关详细信息,请参阅Using MATLAB-Based Simulink Tests in the Test Manager (Simulink Test)。
输出参量
testResults
— 测试结果
matlab.unittest.TestResult
对象的行向量
测试结果,以 matlab.unittest.TestResult
对象的行向量形式返回。向量的每个元素都提供关于运行的测试之一的信息。
coverageResults
— 范围结果
matlab.coverage.Result
对象的列向量
自 R2023b 起
覆盖率结果,以 matlab.coverage.Result
对象的列向量形式返回。向量的每个元素都提供关于测试所覆盖的源代码中其中一个文件的信息。
将此参量与 ReportCoverageFor
名称-值参量结合使用,以编程方式访问源代码的代码覆盖率分析结果。
提示
当您在测试中使用共享测试脚手架并将
runtests
函数的输入指定为字符串数组或字符向量元胞数组时,测试框架会对数组进行排序,以减少共享脚手架的设置和拆解操作。因此,测试运行的顺序可能不同于输入数组中元素的顺序。有关详细信息,请参阅sortByFixtures
。当您在远程并行池上运行测试时(需要 MATLAB Parallel Server™ 和 Parallel Computing Toolbox),MATLAB 首先将包含您的测试的本地文件夹复制到远程工作进程。为了最小化与此步骤相关联的开销,请确保这些文件夹只包含与您的测试相关的文件。
扩展功能
自动并行支持
通过使用 Parallel Computing Toolbox™ 自动运行并行计算来加快代码执行。
要并行运行测试,请将 UseParallel
名称-值参量指定为 true
。
有关并行计算的更多一般信息,请参阅Run MATLAB Functions with Automatic Parallel Support (Parallel Computing Toolbox)。
版本历史记录
在 R2013b 中推出R2023b: 以编程方式访问代码覆盖率结果
要以编程方式访问源代码的代码覆盖率分析结果,请在使用 ReportCoverageFor
名称-值参量时指定第二个输出参量。有关示例,请参阅检索代码覆盖率信息。
R2023a: 按源代码依存关系过滤测试套件
您可以按测试文件对指定源代码的依存关系来过滤测试套件。使用 DependsOn
名称-值参量(需要 MATLAB Test)来指定源文件和文件夹。
R2023a: 运行验证需求集的测试
如果您安装了 Requirements Toolbox™ 和 MATLAB Test,则可以使用 runtests
函数来运行验证需求集的测试。要运行测试,请将一个或多个需求集文件指定为一个字符串标量或字符串向量。例如,results = runtests("myRequirementSet.slreqx")
运行验证指定的需求集的测试。
R2022b: 指定要针对无效测试文件采取的操作
要指定测试框架在遇到文件夹或包中的无效测试文件时是发出警告还是引发错误,请使用 InvalidFileFoundAction
名称-值参量。
R2022b: 从元胞数组生成的参数名称更具描述性
当您将非空元胞数组分配给参数化属性时,测试框架会根据元胞数组中元素的值、类型和维度生成参数名称。在以前的版本中,如果属性值是字符向量元胞数组,该框架将根据元胞数组中的值生成参数名称。否则,该框架将参数名称指定为 value1
、value2
、…、valueN
。
如果您的代码使用参数名称来创建或过滤测试套件,请用描述性参数名称替换旧的参数名称。例如,通过用描述性参数名称替换 value1
来更新 suite = testsuite(pwd,"ParameterName","value1")
。
R2022a: IncludeSubfolders
以同样的方式对待文件夹和包
IncludeSubfolders
名称-值参量以同样的方式对待文件夹和包。例如,runtests(pwd,IncludeSubfolders=true)
运行当前文件夹及其任何子文件夹(包括包文件夹)中的所有测试。在以前的版本中,IncludeSubfolders
会忽略包文件夹。
R2021b: runtests
会忽略未定义测试过程的工程文件
runtests
函数会忽略 MATLAB 工程中未定义测试过程的任何文件。例如,如果抽象的 TestCase
类定义文件使用 Test
分类进行标记,则该函数会忽略它。在以前的版本中,如果对除具体测试文件之外的任何文件使用 Test
分类的工程调用 runtests
,则 MATLAB 会生成错误。
R2021b: 在没有 Java 虚拟机 (JVM) 软件的情况下,工程中的测试无法运行
如果 MATLAB 在没有 Java® 虚拟机 (JVM™) 软件的情况下运行,则 runtests
无法运行 MATLAB 工程中的测试。原因是没有 JVM 软件就无法打开工程。在以前的版本中,当 MATLAB 在没有 JVM 软件的情况下运行时,runtests
基于工程中的测试文件创建一个套件并运行该套件。
R2021a: 在基于线程的池中并行运行测试
您可以通过启动线程工作进程并行池,然后使用 UseParallel
名称-值参量调用 runtests
函数,在基于线程的池上运行测试(需要 Parallel Computing Toolbox)。
在基于线程的池上使用 runtests
运行的测试存在以下限制:
您的测试和源代码只能使用线程工作进程支持的功能。有关基于线程的环境的限制的详细信息,请参阅Choose Between Thread-Based and Process-Based Environments (Parallel Computing Toolbox)。
定义测试内容的文件夹必须位于 MATLAB 搜索路径中。
必须使用类或函数的名称来指定测试名称,不带文件扩展名。
基于线程的池不支持存储测试工件。
基于线程的环境不支持 Simulink。因此,使用 Simulink Test 编写的测试无法在基于线程的池上运行。
R2020b: 在集群和云上并行运行测试
您可以在集群和云上并行运行测试(需要 MATLAB Parallel Server 和 Parallel Computing Toolbox)。要在远程并行池上运行测试,请使用 UseParallel
名称-值参量调用 runtests
函数。
R2020b: 使用独立应用程序并行运行测试
您可以创建支持并行运行测试的独立应用程序(需要 MATLAB Compiler™ 和 Parallel Computing Toolbox)。在代码中使用指令 %#function parallel.Pool
,以便 MATLAB Compiler 可以找到并打包并行运行测试所需的所有组件。有关详细信息,请参阅编译 MATLAB 单元测试。
R2020b: 创建或更新基线数据
要创建或更新在使用特定鉴定方法的测试中使用的 MAT 文件,请使用 GenerateBaselines
名称-值参量。您必须安装 Simulink Test 才能使用 GenerateBaselines
。
R2019a: 在 MATLAB 工程中运行测试
如果您的当前文件夹是工程根文件夹,或您将工程根文件夹的完整路径传递给 runtests
函数,则该函数会运行指定工程中标有 Test
分类的所有测试文件。
R2019a: 从引用工程运行测试
要从引用工程运行测试,请使用 IncludeReferencedProjects
名称-值参量。
R2019a: 生成 HTML 代码覆盖率报告
要指定要包含在代码覆盖率报告中的源代码,请使用 ReportCoverageFor
名称-值参量。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)