Main Content

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

matlab.unittest.TestSuite.fromFile

类: matlab.unittest.TestSuite
包: matlab.unittest

根据测试文件创建 TestSuite 数组

说明

示例

suite = matlab.unittest.TestSuite.fromFile(file) 根据 file 中的所有测试创建 TestSuite 数组。运行测试套件时,MATLAB® 会在测试运行期间将当前文件夹更改为用于定义测试内容的文件夹,并将其添加到路径中。

示例

suite = matlab.unittest.TestSuite.fromFile(file,s) 根据 file 中的所有测试创建 TestSuite 数组,这些测试满足选择器 s 指定的条件。

示例

suite = matlab.unittest.TestSuite.fromFile(___,Name,Value) 使用由一个或多个 Name,Value 对组参数指定的其他选项创建 TestSuite 数组。您可以将此语法与前面语法中的任何输入参数结合使用。

输入参数

file

测试文件的绝对或相对路径,指定为字符向量或字符串标量。

s

选择器,指定为来自 matlab.unittest.selector 包的类的实例。

名称-值对组参数

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

BaseFolder

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

ExternalParameters

用于参数化测试的 matlab.unittest.parameters.Parameter 实例的数组。框架使用这些外部参数代替在参数化测试中定义的对应参数。有关详细信息,请参阅在参数化测试中使用外部参数

Name

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

ParameterProperty

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

ParameterName

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

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

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

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

ProcedureName

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

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

Superclass

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

Tag

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

输出参数

suite

测试集,指定为 matlab.unittest.Test 数组。

属性

Statictrue

要了解方法的属性,请参阅方法属性

示例

全部展开

用于单元测试的函数:

function res = add5(x)
% ADD5 Increment input by 5.
if ~isa(x,'numeric')
    error('add5:InputMustBeNumeric','Input must be numeric.')
end
res = x + 5;
end

包含测试方法的 TestCase 类:

classdef Add5Test < matlab.unittest.TestCase
    methods (Test)
        function testDoubleOut(testCase)
            actOutput = add5(1);
            testCase.verifyClass(actOutput,'double')
        end
        function testNonNumericInput(testCase)
            testCase.verifyError(@()add5('0'),'add5:InputMustBeNumeric')
        end
    end
end

根据 Add5Test 类文件创建测试套件。

suite = matlab.unittest.TestSuite.fromFile('Add5Test.m')
result = run(suite);
Running Add5Test
..
Done Add5Test
__________

在您的工作文件夹中,创建 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

测试类包含两种参数化测试方法:testClasstestSize

在命令提示符下,使用 HasParameter 选择器根据 testZeros.m 中的所有参数化的测试方法创建测试套件。

import matlab.unittest.TestSuite;
import matlab.unittest.selectors.HasParameter;

suite = TestSuite.fromFile('testZeros.m', HasParameter)
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.

使用带有 StartsWithSubstring 约束的 HasName 选择器,仅基于 testSize 方法中的测试元素创建测试套件。

import matlab.unittest.selectors.HasName;
import matlab.unittest.constraints.StartsWithSubstring;

suite = TestSuite.fromFile('testZeros.m',...
    HasName(StartsWithSubstring('testZeros/testSize')));
{suite.Name}'
ans = 

    'testZeros/testSize(outSize=s2d)'
    'testZeros/testSize(outSize=s3d)'

测试套件包含 testSize 方法中的两个参数化测试。

基于以前的示例创建 testZeros.m 类。

在命令提示符下,基于 testZeros.m 中名称以 'testZeros/testSize' 开头的所有测试方法创建测试套件。该测试套件包含 testSize 方法中的参数化测试。

import matlab.unittest.TestSuite;

suite = TestSuite.fromFile('testZeros.m', 'Name', 'testZeros/testSize*');
{suite.Name}'
ans = 

    'testZeros/testSize(outSize=s2d)'
    'testZeros/testSize(outSize=s3d)'

为确保测试套件包含与一种特定的测试方法相关的测试元素,请使用 TestSuitefromMethod 方法。

在命令提示符下,基于名称以 'Size' 结尾的 testZeros.m 中的所有测试方法创建测试套件。

import matlab.unittest.TestSuite;

suite = TestSuite.fromFile('testZeros.m', 'Name', '*Size');
{suite.Name}'
ans = 

    'testZeros/testDefaultSize'

请注意,testSize 方法中的元素不包含在测试套件中。这些元素的名称包含有关参数化的信息,因此不会以 'Size' 结尾。

为使用参数名称 'double' 的所有测试创建测试套件。

suite = TestSuite.fromFile('testZeros.m', 'ParameterName', 'double');
{suite.Name}'
ans = 

    'testZeros/testClass(type=double,outSize=s2d)'
    'testZeros/testClass(type=double,outSize=s3d)'

要使用选择器构建相同的测试套件,请使用 suite = TestSuite.fromFile('testZeros.m', HasParameter('Name','double'))

在 R2013a 中推出