Main Content

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

matlab.unittest.TestSuite.fromPackage

类: matlab.unittest.TestSuite
命名空间: matlab.unittest

基于包中的测试创建测试套件

说明

示例

suite = matlab.unittest.TestSuite.fromPackage(package) 基于指定包中的测试创建一个测试套件,并以 matlab.unittest.TestSuite 数组形式返回测试套件。

当您调用方法来创建测试套件以及当您运行生成的测试套件时,package 的父文件夹必须在路径中。

示例

suite = matlab.unittest.TestSuite.fromPackage(package,selector) 仅包含满足指定选择器条件的测试。

示例

suite = matlab.unittest.TestSuite.fromPackage(___,Name,Value) 支持上述语法中的输入参量组合,且可使用一个或多个名称-值参量指定选项。例如,suite = matlab.unittest.TestSuite.fromPackage("myPackage","IncludingSubpackages",true) 基于指定包及其任何子包中的测试创建一个测试套件。

输入参数

全部展开

包含测试的包的名称,指定为字符串标量或字符向量。

示例: "myPackage"

示例: "myPackage.subpackage"

选择器,指定为 matlab.unittest.selectors 包中类的实例。如果您有 MATLAB® Test™ 许可证,您还可以将 selector 指定为 matlabtest.selectors.DependsOn 实例。

示例: matlab.unittest.selectors.HasTag

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

示例: suite = matlab.unittest.TestSuite.fromPackage("myPackage",IncludingSubpackages=true)

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: suite = matlab.unittest.TestSuite.fromPackage("myPackage","IncludingSubpackages",true)

是否包括 package 的子包中的测试,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,该方法不包括子包中的测试。

package 中的无效测试文件采取的操作,指定为 "warn""error"

  • "warn" - 该方法会对 package 中的每个无效测试文件发出警告,并基于有效文件创建一个测试套件。

  • "error" - 如果方法在 package 中找到无效的测试文件,将引发错误。

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

要在测试中使用的外部参数,指定为由 matlab.unittest.parameters.Parameter 对象组成的数组。使用此参量指定外部参数,而不是参数化测试中的现有参数。有关详细信息,请参阅在参数化测试中使用外部参数

包含测试文件的基本文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。此参量过滤测试套件。要使测试框架包含经过过滤的套件中的一个测试,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 元素都没有匹配的标记名称,将返回空测试套件。使用通配符 (*) 以匹配任何数量的字符。使用问号字符 (?) 只匹配一个字符。

属性

Statictrue

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

示例

全部展开

使用 fromPackage 静态方法基于包中的测试创建测试套件。

此示例假设您的当前文件夹中存在名为 myPackage 的包。如果该包不存在,请创建它。

[~,~] = mkdir("+myPackage")

myPackage 包中名为 add5.m 的文件中,创建 add5 函数。该函数接受数值输入,并将其增加 5。如果使用非数值输入调用该函数,该函数将引发错误。

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

要测试 add5 函数,请在 myPackage 包内名为 Add5Test.m 的文件中创建 Add5Test 类。该类针对数值和非数值输入测试函数。

classdef Add5Test < matlab.unittest.TestCase
    properties (TestParameter)
        type = {'double','single','int8','int32'};
    end

    methods (Test)
        function numericInput(testCase,type)
            actual = add5(cast(1,type));
            testCase.verifyClass(actual,type)
        end
        function nonnumericInput(testCase)
            testCase.verifyError(@() add5("0"),"add5:InputMustBeNumeric")
        end
    end
end

导入此示例中使用的类。

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

请确保您的当前文件夹是 myPackage 的父文件夹。基于 myPackage 包中的测试创建一个测试套件并显示测试名称。该套件包含在 Add5Test 类中定义的测试。

suite = TestSuite.fromPackage("myPackage");
disp({suite.Name}')
    {'myPackage.Add5Test/numericInput(type=double)'}
    {'myPackage.Add5Test/numericInput(type=single)'}
    {'myPackage.Add5Test/numericInput(type=int8)'  }
    {'myPackage.Add5Test/numericInput(type=int32)' }
    {'myPackage.Add5Test/nonnumericInput'          }

创建一个测试套件,其中只包括 myPackage 包中的参数化测试。

suite1 = TestSuite.fromPackage("myPackage",HasParameter);
disp({suite1.Name}')
    {'myPackage.Add5Test/numericInput(type=double)'}
    {'myPackage.Add5Test/numericInput(type=single)'}
    {'myPackage.Add5Test/numericInput(type=int8)'  }
    {'myPackage.Add5Test/numericInput(type=int32)' }

基于 myPackage 包创建一个测试套件,该套件仅包括其名称包含 "nonnumeric" 的测试。

suite2 = TestSuite.fromPackage("myPackage","Name","*nonnumeric*");
disp({suite2.Name}')
    {'myPackage.Add5Test/nonnumericInput'}

版本历史记录

在 R2013a 中推出

全部展开