Main Content

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

testsuite

创建测试套件

说明

示例

suite = testsuite 将使用您的当前文件夹创建测试套件,并以 TestSuite 数组形式返回该套件。

要运行使用 testsuite 创建的测试套件,请使用 matlab.unittest.TestSuitematlab.unittest.TestRunnermatlab.perftest.TimeExperimentrun 方法。

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.

如果您的文件夹中只有 onesTesteyesTest 测试,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 个分别来自 testDefaultClasstestDefaultSizetestDefaultValue 方法。

用测试名称中包含 '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 方法。

输入参数

全部折叠

测试,指定为字符串数组、字符向量或字符向量元胞数组。使用此参量指定测试内容。例如,您可以指定测试文件、测试类、包含测试文件的文件夹、包含测试类的包或包含测试文件的工程文件夹。

示例: 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 创建测试套件。

测试标识

全部折叠

指明是否在套件中包括子文件夹中的测试的指示符,指定为 falsetrue01)。默认情况下,框架只使用指定文件夹(而不包含其子文件夹)中的测试来创建测试套件。

指明是否在套件中包括子包中的测试的指示符,指定为 falsetrue01)。默认情况下,框架只使用指定包(而不包含其子包)中的测试来创建测试套件。

是否包含来自引用工程的测试,指定为数值或逻辑值 0 (false) 或 1 (true)。有关引用工程的详细信息,请参阅大型工程组件化

对函数正在处理的文件夹或包中的无效测试文件采取的操作,指定为 "warn""error"

  • "warn" - 该函数对文件夹或包中的每个无效测试文件发出警告,并根据有效文件创建测试套件。

  • "error" - 如果该函数在文件夹或包中发现无效的测试文件,将会引发错误。

无效测试文件是框架无法从中生成测试套件的测试文件。示例包括:包含语法错误的测试文件、基于函数但缺失局部函数的测试文件,以及具有 Test 方法但向该方法传递了未定义的参数化属性的文件。

测试过滤

全部折叠

包含测试文件的基本文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,Test 元素必须包含在 BaseFolder 指定的基本文件夹之一中。如果没有 Test 元素与基本文件夹匹配,将返回空测试套件。使用通配符 (*) 以匹配任何数量的字符。使用问号字符 (?) 只匹配一个字符。

对于包中定义的测试文件,基本文件夹是顶级包文件夹的父级。

包含源代码的文件和文件夹的名称,指定为字符串向量、字符向量或字符向量元胞向量。此参量过滤测试套件。为了使测试框架在过滤后的套件中包括测试,定义测试的文件必须依赖指定的源代码。如果没有测试文件依赖源代码,则返回空测试套件。

指定的值必须表示至少一个具有 .m.p.mlx.mlapp.mat.slx 扩展名的现有文件。无法用不支持的扩展名显式指定文件名。如果指定文件夹名称,框架将提取该文件夹中受支持文件的路径。

您必须有 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 元素都没有匹配的标记名称,将返回空测试套件。使用通配符 (*) 以匹配任何数量的字符。使用问号字符 (?) 只匹配一个字符。

详细信息

全部折叠

从 MLDATX 文件创建测试套件

您可以使用 testsuite 函数根据 MLDATX 文件创建测试套件(需要 Simulink® Test)。例如,suite = testsuite('myTestFile.mldatx') 根据文件 myTestFile.mldatx 中指定的测试创建一个套件。

当您指定 MLDATX 文件时,testsuite 会创建一个包含该文件中所有测试的套件。您无法指示 testsuite 根据 MLDATX 文件中的特定测试创建一个套件。

提示

  • 如果您不需要显式创建测试套件,请在运行测试之前使用 runtestsrunperf 隐式创建测试套件。

  • 创建显式测试套件的另一个方法是使用 matlab.unittest.TestSuite 方法。

  • 当您将 testsuite 函数的输入指定为字符串数组或字符向量元胞数组(例如,suite = testsuite(["Test1","Test2"]))时,测试框架会对数组进行排序,以减少共享测试脚手架的设置和拆解操作。因此,测试运行的顺序可能不同于输入数组中元素的顺序。

    要强制设定测试运行的顺序,请通过多次调用 testsuite 来创建套件。例如,要确保 Test1 指定的测试在 Test2 指定的测试之前运行,请使用以下语法:

    suite = [testsuite("Test1") testsuite("Test2")]
    

版本历史记录

在 R2016a 中推出

全部展开