Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

testsuite

创建测试套件

说明

示例

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

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

suite = testsuite(tests) 使用一组指定的测试来创建测试套件。

示例

suite = testsuite(tests,Name,Value) 使用由一个或多个 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/aTest')

示例: testsuite('mypackage.MyTestClass')

示例: testsuite(pwd)

示例: testsuite({'mypackage.MyTestClass','myTestFile.m',pwd,'mypackage.subpackage'})

示例: testsuite('C:/projects/project1/')

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: suite = testsuite(tests,'Name','productA_*') 使用名称以 'productA_' 开头的 tests 创建测试套件。

包含用于定义测试类、函数或脚本的文件的基本文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,Test 元素必须包含在 BaseFolder 指定的基本文件夹之一中。如果没有 Test 元素与基本文件夹匹配,将返回空测试套件。使用通配符 * 以匹配任何数量的字符。使用问号字符 ? 只匹配一个字符。对于包中定义的测试文件,基本文件夹是顶级包文件夹的父级。

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

数据类型: logical

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

数据类型: logical

指示是否包含来自引用工程的测试的指示符,指定为 falsetrue。有关引用工程的详细信息,请参阅大型工程组件化

数据类型: logical

套件元素的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,Test 元素的 Name 属性必须匹配 Name 指定的名称之一。如果 Test 元素都没有匹配的名称,将返回空测试套件。使用通配符 * 以匹配任何数量的字符。使用问号字符 ? 只匹配一个字符。

定义测试套件元素使用的参数的测试类属性的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,Test 元素的 Parameterization 属性必须包含 ParameterProperty 指定的至少一个属性名称。如果 Test 元素都没有匹配的属性名称,将返回空测试套件。使用通配符 * 以匹配任何数量的字符。使用问号字符 ? 只匹配一个字符。

测试套件元素使用的参数的名称,指定为字符串数组、字符向量或字符向量元胞数组。MATLAB 根据定义参数的测试类属性生成参数名称:

  • 如果属性值是字符向量元胞数组,MATLAB 将根据元胞数组中的值生成参数名称。否则,MATLAB 将参数名称指定为 value1value2、…、valueN

  • 如果属性值是结构体,则 MATLAB 将根据结构体字段生成参数名称。

ParameterName 参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,Test 元素的 Parameterization 属性必须包含 ParameterName 指定的至少一个参数名称。如果 Test 元素都没有匹配的参数名称,将返回空测试套件。使用通配符 * 以匹配任何数量的字符。使用问号字符 ? 只匹配一个字符。

测试过程的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,Test 元素的 ProcedureName 属性必须匹配 ProcedureName 指定的过程名称之一。如果 Test 元素都没有匹配的过程名称,将返回空测试套件。使用通配符 * 以匹配任何数量的字符。使用问号字符 ? 只匹配一个字符。

在基于类的测试中,ProcedureName 是测试方法的名称。在基于函数的测试中,它是包含测试的局部函数的名称。在基于脚本的测试中,它是从测试部分标题生成的名称。与 Name 不同的是,测试过程的名称不包括任何类或包名称或有关参数化的信息。

派生测试类的父类的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,Test 元素的 TestClass 属性必须指向从 Superclass 指定的类之一派生的一个测试类。如果没有 Test 元素与类匹配,将返回空测试套件。

测试套件元素使用的测试标记的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参数筛选 TestSuite 数组元素。要使测试框架包含套件中的一个测试,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 中推出