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 = 1×3 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 = 1×8 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
方法。
输入参数
测试,指定为字符串数组、字符向量或字符向量元胞数组。使用此参量指定测试内容。例如,您可以指定测试文件、测试类、包含测试文件的文件夹、包含测试类的命名空间或包含测试文件的工程文件夹。
示例: testsuite("myTestFile.m")
示例: testsuite(["myTestFile/test1" "myTestFile/test3"])
示例: testsuite("myNamespace.MyTestClass")
示例: testsuite(pwd)
示例: testsuite({'myNamespace.MyTestClass','myTestFile.m',pwd,'myNamespace.innerNamespace'})
示例: 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
创建测试套件。
测试标识
是否在套件中包括子文件夹中的测试的选项,指定为数值或逻辑值 0
(false
) 或 1
(true
)。默认情况下,框架只使用指定文件夹(而不包含其子文件夹)中的测试来创建测试套件。
在套件的内部命名空间中包含测试的选项,指定为数值或逻辑值 0
(false
) 或 1
(true
)。默认情况下,框架只根据指定命名空间(不包含其内部命名空间)中测试来创建套件。
包含来自引用工程的测试的选项,指定为数值或逻辑值 0
(false
) 或 1
(true
)。有关引用工程的详细信息,请参阅大型工程组件化。
对函数正在处理的文件夹或命名空间中的无效测试文件采取的操作,指定为以下值之一:
"warn"
- 该函数对文件夹或命名空间中的每个无效测试文件发出警告,并根据有效文件创建测试套件。"error"
- 如果该函数在文件夹或命名空间中发现无效的测试文件,将会抛出错误。
无效测试文件是框架无法从中生成测试套件的测试文件。示例包括:包含语法错误的测试文件、基于函数但缺失局部函数的测试文件,以及具有 Test
方法但向该方法传递了未定义的参数化属性的文件。
测试过滤
包含测试文件的基本文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素必须包含在 BaseFolder
指定的基本文件夹之一中。如果没有 Test
元素与基本文件夹匹配,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
对于命名空间中定义的测试文件,基本文件夹是顶级命名空间文件夹的父级。
包含源代码的文件和文件夹的名称,指定为字符串向量、字符向量或字符向量元胞向量。此参量通过仅包括依赖指定源代码的测试来过滤测试套件。如果没有测试依赖源代码,则返回空测试套件。
指定的值必须表示至少一个现有文件。如果指定文件夹,框架将提取该文件夹中文件的路径。
您必须有 MATLAB Test™ 许可证才能使用 DependsOn
。有关通过源代码依赖关系选择测试的详细信息,请参阅 matlabtest.selectors.DependsOn
(MATLAB Test)。
示例: DependsOn=["myFile.m" "myFolder"]
示例: DependsOn=["folderA" "C:\work\folderB"]
测试的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Name
属性必须匹配 Name
指定的名称之一。如果 Test
元素都没有匹配的名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
对于一个给定的测试文件,测试的名称唯一地标识测试内容的最小可运行部分。测试名称包括命名空间名称、文件名(不包括扩展名)、过程名称和关于参数化的信息。
定义测试使用的参数的测试类属性的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Parameterization
属性必须包含 ParameterProperty
指定的至少一个属性名称。如果 Test
元素都没有匹配的属性名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
测试使用的参数的名称,指定为字符串数组、字符向量或字符向量元胞数组。MATLAB 根据定义参数的测试类属性生成参数名称。例如:
如果属性值是元胞数组,则 MATLAB 根据元胞数组元素的值、类型和维度,基于元胞数组的元素生成参数名称。
如果属性值是结构体,则 MATLAB 将根据结构体字段生成参数名称。
ParameterName
参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Parameterization
属性必须包含 ParameterName
指定的至少一个参数名称。如果 Test
元素都没有匹配的参数名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
测试过程的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 ProcedureName
属性必须匹配 ProcedureName
指定的过程名称之一。如果 Test
元素都没有匹配的过程名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
在基于类的测试中,测试过程的名称是包含该测试的 Test
方法的名称。在基于函数的测试中,它是包含测试的局部函数的名称。在基于脚本的测试中,它是从测试部分标题生成的名称。与测试套件元素的名称不同,测试过程的名称不包括任何命名空间名称、文件名或关于参数化的信息。
派生测试类的父类的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 TestClass
属性必须指向从 Superclass
指定的类之一派生的一个测试类。如果没有 Test
元素与类匹配,将返回空测试套件。
测试使用的标记的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test
元素的 Tags
属性必须包含 Tag
指定的至少一个标记名称。如果 Test
元素都没有匹配的标记名称,将返回空测试套件。使用通配符 (*
) 以匹配任何数量的字符。使用问号字符 (?
) 只匹配一个字符。
详细信息
您可以使用 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 中推出当使用 DependsOn
名称-值参量(需要 MATLAB Test)选择基于函数或基于类的测试时,该函数会更准确地选择依赖指定源代码的测试。如果该函数可以确定测试文件中具体哪些测试依赖源代码,则它仅选择依赖的测试并排除其余测试。否则,该函数会包括测试文件中的所有测试。
在以前的版本中,如果文件依赖指定的源代码,则该函数包括测试文件中的所有测试,而不尝试排除不依赖源代码的测试。
IncludeSubpackages
名称-值参量现在命名为 IncludeInnerNamespaces
。行为保持不变,代码中现有的 IncludeSubpackages
实例继续按预期工作。目前没有停止支持对 IncludeSubpackages
的现有引用的计划。
如果您有 MATLAB Test 许可证,则可以使用 DependsOn
名称-值参量指定任何类型的源文件。在以前的版本中,您只能指定扩展名为 .m
、.p
、.mlx
、.mlapp
、.mat
或 .slx
的文件。
您可以按测试文件对指定源代码的依赖关系来过滤测试套件。使用 DependsOn
名称-值参量(需要 MATLAB Test)来指定源文件和文件夹。
如果您安装了 Requirements Toolbox™ 和 MATLAB Test,可以使用 testsuite
函数基于验证需求集的测试创建一个测试套件。要创建一个套件,请将一个或多个需求集文件指定为字符串标量或字符串向量。例如,suite = testsuite("myRequirementSet.slreqx")
创建一个用于验证指定的需求集的测试套件。
要指定测试框架在遇到文件夹或命名空间中的无效测试文件时是发出警告还是抛出错误,请使用 InvalidFileFoundAction
名称-值参量。
当您将非空元胞数组分配给参数化属性时,测试框架会根据元胞数组中元素的值、类型和维度生成参数名称。在以前的版本中,如果属性值是字符向量元胞数组,该框架将根据元胞数组中的值生成参数名称。否则,该框架将参数名称指定为 value1
、value2
、…、valueN
。
如果您的代码使用参数名称来创建或过滤测试套件,请用描述性参数名称替换旧的参数名称。例如,通过用描述性参数名称替换 value1
来更新 suite = testsuite(pwd,"ParameterName","value1")
。
IncludeSubfolders
名称-值参量以相同的方式对待文件夹和命名空间。例如,suite = testsuite(pwd,IncludeSubfolders=true)
基于当前文件夹及其任何子文件夹(包括命名空间文件夹)中的所有测试文件创建一个套件。在以前的版本中,IncludeSubfolders
会忽略命名空间文件夹。
testsuite
函数会忽略 MATLAB 工程中未定义测试过程的任何文件。例如,如果抽象的 TestCase
类定义文件使用 Test
分类进行标记,则该函数会忽略它。在以前的版本中,如果对除具体测试文件之外的任何文件使用 Test
分类的工程调用 testsuite
,则 MATLAB 会生成错误。
如果在没有 Java® 虚拟机 (JVM®) 软件的情况下启动 MATLAB,并使用 testsuite
从工程中的测试文件创建套件,则该函数使用 matlab.unittest.TestSuite.fromProject
方法创建套件。如果您尝试在没有 JVM 软件的情况下运行测试套件,则 MATLAB 会生成错误,因为没有 JVM 软件就无法打开工程。在以前的版本中,当 MATLAB 在没有 JVM 软件的情况下运行时,testsuite
会使用 matlab.unittest.TestSuite.fromFolder
从工程中的测试文件创建一个套件,测试框架会运行生成的测试套件。
当 runtests
和 runperf
函数对组织到工程中的文件和文件夹中的代码进行操作时,此行为更改也适用于这些函数。
如果您的当前文件夹是工程根文件夹,或您将工程根文件夹的路径传递给 testsuite
函数,则该函数会基于指定工程中标有 Test
分类的所有测试文件创建一个测试套件。
要在测试套件中包含来自引用工程的测试,请使用 IncludeReferencedProjects
名称-值参量。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)