testsuite
创建测试套件
说明
suite = testsuite
将使用您的当前文件夹创建测试套件,并以 TestSuite
数组形式返回该套件。
要运行使用 testsuite
创建的测试套件,请使用 matlab.unittest.TestSuite
、matlab.unittest.TestRunner
或 matlab.perftest.TimeExperiment
的 run
方法。
suite = testsuite(
使用一组指定的测试来创建测试套件。tests
)
suite = testsuite(___,
使用由一个或多个名称-值参量指定的附加选项创建一个测试套件。Name,Value
)
示例
基于工作文件夹的测试套件
在您的当前工作文件夹中创建文件夹 myExample
,使它成为当前工作文件夹,然后创建几个测试。
在 myExample
文件夹中,创建基于脚本的测试 onesTest.m
。
%% Test double class expClass = 'double'; act = ones; assert(isa(act,expClass)) %% Test single class expClass = 'single'; act = ones('single'); assert(isa(act,expClass)) %% Test uint16 class expClass = 'uint16'; act = ones('uint16'); assert(isa(act,expClass)) %% Test size expSize = [7 13]; act = ones([7 13]); assert(isequal(size(act),expSize)) %% Test values act = ones(42); assert(unique(act) == 1)
在 myExample
文件夹中,创建基于函数的测试 eyeTest.m
。
function tests = eyeTest tests = functiontests(localfunctions); function doubleClassTest(testCase) actValue = eye; verifyClass(testCase,actValue,'double') function singleClassTest(testCase) actValue = eye('single'); verifyClass(testCase,actValue,'single') function uint16ClassTest(testCase) actValue = eye('uint16'); verifyClass(testCase,actValue,'uint16') function sizeTest(testCase) expSize = [7 13]; actValue = eye(expSize); verifySize(testCase,actValue,expSize); function valueTest(testCase) actValue = eye(42); verifyEqual(testCase,unique(diag(actValue)),1) % diagonal are 1s verifyEqual(testCase,unique(triu(actValue,1)),0) % upper tri vals are 0 verifyEqual(testCase,unique(tril(actValue,-1)),0) % lower tri vals are 0
使用当前文件夹中的所有测试创建测试套件。
suite = testsuite
suite = 1×10 Test array with properties: Name BaseFolder ProcedureName SharedTestFixtures Parameterization Tags Tests Include: 0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.
如果您的文件夹中只有 onesTest
和 eyesTest
测试,MATLAB® 将创建包含 10 个测试的套件。
查看 suite
中的测试的名称。
{suite.Name}'
ans = 'eyeTest/doubleClassTest' 'eyeTest/singleClassTest' 'eyeTest/uint16ClassTest' 'eyeTest/sizeTest' 'eyeTest/valueTest' 'onesTest/TestDoubleClass' 'onesTest/TestSingleClass' 'onesTest/TestUint16Class' 'onesTest/TestSize' 'onesTest/TestValues'
使用 eyeTest
中的所有测试创建测试套件。
suite2 = testsuite('eyeTest')
suite2 = 1×5 Test array with properties: Name BaseFolder ProcedureName SharedTestFixtures Parameterization Tags Tests Include: 0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.
基于选定测试的测试套件
在您的工作文件夹中,创建基于类的测试 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
方法。
用测试名称中包含 'Default'
的测试元素创建测试套件。
suite = testsuite('testZeros','Name','*Default*')
suite = 1x3 Test array with properties: Name ProcedureName TestClass BaseFolder Parameterization SharedTestFixtures Tags Tests Include: 0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.
用使用 outSize
参数属性的测试元素创建测试套件。
suite = testsuite('testZeros','ParameterProperty','outSize')
suite = 1x8 Test array with properties: Name ProcedureName TestClass BaseFolder Parameterization SharedTestFixtures Tags Tests Include: 5 Unique Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.
该测试套件包含八个使用 outSize
参数属性的测试:六个来自 testClass
方法,两个来自 testSize
方法。
输入参数
tests
— 测试
字符串数组 | 字符向量 | 字符向量元胞数组
测试,指定为字符串数组、字符向量或字符向量元胞数组。使用此参量指定测试内容。例如,您可以指定测试文件、测试类、包含测试文件的文件夹、包含测试类的包或包含测试文件的工程文件夹。
示例: testsuite("myTestFile.m")
示例: testsuite(["myTestFile/test1" "myTestFile/test3"])
示例: testsuite("mypackage.MyTestClass")
示例: testsuite(pwd)
示例: testsuite({'mypackage.MyTestClass','myTestFile.m',pwd,'mypackage.subpackage'})
示例: testsuite("C:\projects\project1")
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: suite = testsuite(tests,Name="productA_*")
使用名称以 "productA_"
开头的 tests
创建测试套件。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: suite = testsuite(tests,"Name","productA_*")
使用名称以 "productA_"
开头的 tests
创建测试套件。
IncludeSubfolders
— 指示是否包括子文件夹中的测试的指示符
false
(默认) | true
| 0
| 1
指明是否在套件中包括子文件夹中的测试的指示符,指定为 false
或 true
(0
或 1
)。默认情况下,框架只使用指定文件夹(而不包含其子文件夹)中的测试来创建测试套件。
IncludeSubpackages
— 指示是否包括子包中的测试的指示符
false
(默认) | true
| 0
| 1
指明是否在套件中包括子包中的测试的指示符,指定为 false
或 true
(0
或 1
)。默认情况下,框架只使用指定包(而不包含其子包)中的测试来创建测试套件。
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
元素都没有匹配的标记名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
详细信息
从 MLDATX 文件创建测试套件
您可以使用 testsuite
函数根据 MLDATX 文件创建测试套件(需要 Simulink® Test)。例如,suite = testsuite('myTestFile.mldatx')
根据文件 myTestFile.mldatx
中指定的测试创建一个套件。
当您指定 MLDATX 文件时,testsuite
会创建一个包含该文件中所有测试的套件。您无法指示 testsuite
根据 MLDATX 文件中的特定测试创建一个套件。
提示
创建显式测试套件的另一个方法是使用
matlab.unittest.TestSuite
方法。当您将
testsuite
函数的输入指定为字符串数组或字符向量元胞数组(例如,suite = testsuite(["Test1","Test2"])
)时,测试框架会对数组进行排序,以减少共享测试脚手架的设置和拆解操作。因此,测试运行的顺序可能不同于输入数组中元素的顺序。要强制设定测试运行的顺序,请通过多次调用
testsuite
来创建套件。例如,要确保Test1
指定的测试在Test2
指定的测试之前运行,请使用以下语法:suite = [testsuite("Test1") testsuite("Test2")]
版本历史记录
在 R2016a 中推出R2023a: 按源代码依存关系过滤测试套件
您可以按测试文件对指定源代码的依存关系来过滤测试套件。使用 DependsOn
名称-值参量(需要 MATLAB Test)来指定源文件和文件夹。
R2023a: 基于验证需求集的测试创建测试套件
如果您安装了 Requirements Toolbox™ 和 MATLAB Test,可以使用 testsuite
函数基于验证需求集的测试创建一个测试套件。要创建一个套件,请将一个或多个需求集文件指定为字符串标量或字符串向量。例如,suite = testsuite("myRequirementSet.slreqx")
创建一个用于验证指定的需求集的测试套件。
R2022b: 指定要针对无效测试文件采取的操作
要指定测试框架在遇到文件夹或包中的无效测试文件时是发出警告还是引发错误,请使用 InvalidFileFoundAction
名称-值参量。
R2022b: 从元胞数组生成的参数名称更具描述性
当您将非空元胞数组分配给参数化属性时,测试框架会根据元胞数组中元素的值、类型和维度生成参数名称。在以前的版本中,如果属性值是字符向量元胞数组,该框架将根据元胞数组中的值生成参数名称。否则,该框架将参数名称指定为 value1
、value2
、…、valueN
。
如果您的代码使用参数名称来创建或过滤测试套件,请用描述性参数名称替换旧的参数名称。例如,通过用描述性参数名称替换 value1
来更新 suite = testsuite(pwd,"ParameterName","value1")
。
R2022a: IncludeSubfolders
以同样的方式对待文件夹和包
IncludeSubfolders
名称-值参量以同样的方式对待文件夹和包。例如,suite = testsuite(pwd,IncludeSubfolders=true)
基于当前文件夹及其任何子文件夹(包括包文件夹)中的所有测试文件创建一个套件。在以前的版本中,IncludeSubfolders
会忽略包文件夹。
R2021b: testsuite
会忽略未定义测试过程的工程文件
testsuite
函数会忽略 MATLAB 工程中未定义测试过程的任何文件。例如,如果抽象的 TestCase
类定义文件使用 Test
分类进行标记,则该函数会忽略它。在以前的版本中,如果对除具体测试文件之外的任何文件使用 Test
分类的工程调用 testsuite
,则 MATLAB 会生成错误。
R2021b: 在没有 Java 虚拟机 (JVM) 软件的情况下,从工程创建的测试套件无法运行
如果在没有 Java® 虚拟机 (JVM™) 软件的情况下启动 MATLAB,并使用 testsuite
从工程中的测试文件创建套件,则该函数使用 matlab.unittest.TestSuite.fromProject
方法创建套件。如果您尝试在没有 JVM 软件的情况下运行测试套件,则 MATLAB 会生成错误,因为没有 JVM 软件就无法打开工程。在以前的版本中,当 MATLAB 在没有 JVM 软件的情况下运行时,testsuite
会使用 matlab.unittest.TestSuite.fromFolder
从工程中的测试文件创建一个套件,测试框架会运行生成的测试套件。
当 runtests
和 runperf
函数对组织到工程中的文件和文件夹中的代码进行操作时,此行为更改也适用于这些函数。
R2019a: 从 MATLAB 工程中的测试创建测试套件
如果您的当前文件夹是工程根文件夹,或您将工程根文件夹的路径传递给 testsuite
函数,则该函数会基于指定工程中标有 Test
分类的所有测试文件创建一个测试套件。
R2019a: 包含来自引用工程的测试
要在测试套件中包含来自引用工程的测试,请使用 IncludeReferencedProjects
名称-值参量。
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)