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/aTest')
示例: testsuite('mypackage.MyTestClass')
示例: testsuite(pwd)
示例: testsuite({'mypackage.MyTestClass','myTestFile.m',pwd,'mypackage.subpackage'})
示例: testsuite('C:/projects/project1/')
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 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
(默认) | true
| 0
| 1
指示是否包含来自引用工程的测试的指示符,指定为 false
或 true
。有关引用工程的详细信息,请参阅大型工程组件化。
InvalidFileFoundAction
— 对无效测试文件采取的操作
"warn"
(默认) | "error"
对函数正在处理的文件夹或包中的无效测试文件采取的操作,指定为 "warn"
或 "error"
。
"warn"
- 该函数对文件夹或包中的每个无效测试文件发出警告,并根据有效文件创建测试套件。"error"
- 如果该函数在文件夹或包中发现无效的测试文件,将会引发错误。
无效测试文件是框架无法从中生成测试套件的测试文件。示例包括:包含语法错误的测试文件、基于函数但缺少局部函数的测试文件,以及具有 Test
方法但向该方法传递了未定义的参数化属性的文件。
BaseFolder
— 基本文件夹的名称
字符串数组 | 字符向量 | 字符向量元胞数组
包含用于定义测试类、函数或脚本的文件的基本文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,Test
元素必须包含在 BaseFolder
指定的基本文件夹之一中。如果没有 Test
元素与基本文件夹匹配,将返回空测试套件。使用通配符 *
以匹配任何数量的字符。使用问号字符 ?
只匹配一个字符。对于包中定义的测试文件,基本文件夹是顶级包文件夹的父级。
Name
— 测试套件元素的名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试套件元素的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,Test
元素的 Name
属性必须匹配 Name
指定的名称之一。如果 Test
元素都没有匹配的名称,将返回空测试套件。使用通配符 *
以匹配任何数量的字符。使用问号字符 ?
只匹配一个字符。
对于一个给定的测试文件,测试套件元素的名称唯一地标识测试内容的最小可运行部分。它包括包名称、文件名(不包括扩展名)、过程名称和有关参数化的信息。
ParameterProperty
— 参数化属性的名称
字符串数组 | 字符向量 | 字符向量元胞数组
定义测试套件元素使用的参数的测试类属性的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,Test
元素的 Parameterization
属性必须包含 ParameterProperty
指定的至少一个属性名称。如果 Test
元素都没有匹配的属性名称,将返回空测试套件。使用通配符 *
以匹配任何数量的字符。使用问号字符 ?
只匹配一个字符。
ParameterName
— 参数名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试套件元素使用的参数的名称,指定为字符串数组、字符向量或字符向量元胞数组。MATLAB 根据定义参数的测试类属性生成参数名称:
如果属性值是元胞数组,则 MATLAB 根据元胞数组元素的值、类型和维度,基于元胞数组的元素生成参数名称。
如果属性值是结构体,则 MATLAB 将根据结构体字段生成参数名称。
ParameterName
参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,Test
元素的 Parameterization
属性必须包含 ParameterName
指定的至少一个参数名称。如果 Test
元素都没有匹配的参数名称,将返回空测试套件。使用通配符 *
以匹配任何数量的字符。使用问号字符 ?
只匹配一个字符。
ProcedureName
— 测试过程的名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试过程的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,Test
元素的 ProcedureName
属性必须匹配 ProcedureName
指定的过程名称之一。如果 Test
元素都没有匹配的过程名称,将返回空测试套件。使用通配符 *
以匹配任何数量的字符。使用问号字符 ?
只匹配一个字符。
在基于类的测试中,测试过程的名称是包含该测试的 Test
方法的名称。在基于函数的测试中,它是包含测试的局部函数的名称。在基于脚本的测试中,它是从测试部分标题生成的名称。与测试套件元素的名称不同,测试过程的名称不包括任何包名称、文件名或关于参数化的信息。
Superclass
— 派生测试类的父类的名称
字符串数组 | 字符向量 | 字符向量元胞数组
派生测试类的父类的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,Test
元素的 TestClass
属性必须指向从 Superclass
指定的类之一派生的一个测试类。如果没有 Test
元素与类匹配,将返回空测试套件。
Tag
— 测试元素标记的名称
字符串数组 | 字符向量 | 字符向量元胞数组
测试套件元素使用的测试标记的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数过滤 TestSuite
数组元素。要使测试框架包含套件中的一个测试,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 中推出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)