Main Content

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

selectIf

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

选择满足条件的测试套件元素

说明

示例

filteredSuite = selectIf(suite,selector) 选择满足由指定选择器设置的条件的指定测试套件的元素。该方法以经过过滤的 TestSuite 数组形式返回所选元素。

示例

filteredSuite = selectIf(suite,Name,Value) 使用由一个或多个名称-值参量指定的选项来过滤测试套件。例如,filteredSuite = selectIf(suite,"Name","featureA_*") 选择其名称以 "featureA_" 开头的 suite 的元素。

输入参数

全部展开

测试套件,指定为 matlab.unittest.TestSuite 数组。

选择器,指定为 matlab.unittest.selectors 包中类的实例。如果您安装了 MATLAB® Test™,则还可以将 selector 指定为 matlabtest.selectors.DependsOn 对象。

示例: matlab.unittest.selectors.HasTag

名称-值参数

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

示例: filteredSuite = selectIf(suite,Name="featureA_*")

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

示例: filteredSuite = selectIf(suite,"Name","featureA_*")

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

属性

Sealedtrue

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

示例

全部展开

使用 selectIf 方法过滤测试套件。

在当前文件夹下名为 FeatureTest.m 的文件中,创建 FeatureTest 类,它包含使用共享测试脚手架的测试。为了简化测试代码,测试类使用无条件测试失败作为未实现测试的占位符。

classdef (SharedTestFixtures={ ...
        matlab.unittest.fixtures.SuppressedWarningsFixture( ...
        "MATLAB:rmpath:DirNotFound")}) ...
        FeatureTest < matlab.unittest.TestCase
    methods (Test)
        function testA(testCase)
            testCase.verifyFail("Implement the test.")
        end
        function testB(testCase)
            testCase.verifyFail("Implement the test.")
        end
        function testC(testCase)
            testCase.verifyFail("Implement the test.")
        end
    end
end

导入此示例中使用的类。

import matlab.unittest.selectors.HasName
import matlab.unittest.constraints.ContainsSubstring
import matlab.unittest.constraints.EndsWithSubstring
import matlab.unittest.selectors.HasSharedTestFixture
import matlab.unittest.fixtures.SuppressedWarningsFixture

基于 FeatureTest 类创建一个测试套件,并显示测试名称。该套件包含三个 Test 元素。

suite = testsuite("FeatureTest");
disp({suite.Name}')
    {'FeatureTest/testA'}
    {'FeatureTest/testB'}
    {'FeatureTest/testC'}

通过选择其名称包含不区分大小写的文本 "TA" 的测试,创建一个经过过滤的测试套件。

suite1 = selectIf(suite,HasName(ContainsSubstring("TA","IgnoringCase",true)));
disp({suite1.Name}')
    {'FeatureTest/testA'}

通过选择其名称包含 "A""B" 的测试来创建一个经过过滤的测试套件。

suite2 = selectIf(suite,"Name",["*A*" "*B*"]);
disp({suite2.Name}')
    {'FeatureTest/testA'}
    {'FeatureTest/testB'}

创建一个经过过滤的测试套件,该套件使用指定的共享测试脚手架并且名称不以 "C" 结尾。所有测试都使用指定的脚手架,但 "testC" 被排除在套件之外,因为其名称不满足命名约束。

suite3 = suite.selectIf(~HasName(EndsWithSubstring("C")) &  ...
    HasSharedTestFixture(SuppressedWarningsFixture( ...
    "MATLAB:rmpath:DirNotFound")));
disp({suite3.Name}')
    {'FeatureTest/testA'}
    {'FeatureTest/testB'}

通过基于参数化选择测试来创建经过过滤的测试套件。

在当前文件夹中名为 ZerosTest.m 的文件中,创建 ZerosTest 类来测试 zeros 函数。该类有两个参数化的 Test 方法:testClasstestSize

classdef ZerosTest < matlab.unittest.TestCase
    properties (TestParameter)
        type = {'single','double','uint16'};
        size = struct("s2d",[3 3],"s3d",[2 5 4]);
    end
    
    methods (Test)
        function testClass(testCase,size,type)
            testCase.verifyClass(zeros(size,type),type)
        end
        
        function testSize(testCase,size)
            testCase.verifySize(zeros(size),size)
        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

导入 HasParameter 类。

import matlab.unittest.selectors.HasParameter

基于 ZerosTest 类创建一个测试套件,并显示测试名称。该套件包含 11 个 Test 元素。

suite = testsuite("ZerosTest");
disp({suite.Name}')
    {'ZerosTest/testClass(size=s2d,type=single)'}
    {'ZerosTest/testClass(size=s2d,type=double)'}
    {'ZerosTest/testClass(size=s2d,type=uint16)'}
    {'ZerosTest/testClass(size=s3d,type=single)'}
    {'ZerosTest/testClass(size=s3d,type=double)'}
    {'ZerosTest/testClass(size=s3d,type=uint16)'}
    {'ZerosTest/testSize(size=s2d)'             }
    {'ZerosTest/testSize(size=s3d)'             }
    {'ZerosTest/testDefaultClass'               }
    {'ZerosTest/testDefaultSize'                }
    {'ZerosTest/testDefaultValue'               }

通过选择所有参数化测试来创建一个过滤后测试套件。

suite1 = suite.selectIf(HasParameter);
disp({suite1.Name}')
    {'ZerosTest/testClass(size=s2d,type=single)'}
    {'ZerosTest/testClass(size=s2d,type=double)'}
    {'ZerosTest/testClass(size=s2d,type=uint16)'}
    {'ZerosTest/testClass(size=s3d,type=single)'}
    {'ZerosTest/testClass(size=s3d,type=double)'}
    {'ZerosTest/testClass(size=s3d,type=uint16)'}
    {'ZerosTest/testSize(size=s2d)'             }
    {'ZerosTest/testSize(size=s3d)'             }

选择所有未参数化的测试。

suite2 = suite.selectIf(~HasParameter);
disp({suite2.Name}')
    {'ZerosTest/testDefaultClass'}
    {'ZerosTest/testDefaultSize' }
    {'ZerosTest/testDefaultValue'}

选择具有参数化属性 "type" 和参数名称 "double" 的所有参数化测试。

suite3 = suite.selectIf(HasParameter("Property","type","Name","double"));
disp({suite3.Name}')
    {'ZerosTest/testClass(size=s2d,type=double)'}
    {'ZerosTest/testClass(size=s3d,type=double)'}

选择具有名称以 "t" 开头的参数化属性的所有参数化测试。

suite4 = suite.selectIf("ParameterProperty","t*");
disp({suite4.Name}')
    {'ZerosTest/testClass(size=s2d,type=single)'}
    {'ZerosTest/testClass(size=s2d,type=double)'}
    {'ZerosTest/testClass(size=s2d,type=uint16)'}
    {'ZerosTest/testClass(size=s3d,type=single)'}
    {'ZerosTest/testClass(size=s3d,type=double)'}
    {'ZerosTest/testClass(size=s3d,type=uint16)'}

通过根据测试标记选择测试来创建经过过滤的测试套件。

在当前文件夹下名为 ExampleTest.m 的文件中,创建 ExampleTest 类,该类使用 TestTags 方法级属性来标记各个测试。为了简化测试代码,此示例中的 Test 方法使用无条件测试失败作为未实现测试的占位符。

classdef ExampleTest < matlab.unittest.TestCase
    methods (Test)
        function testA(testCase)
            testCase.verifyFail("Implement the test.")
        end
    end
    methods (Test,TestTags="Unit")
        function testB (testCase)
            testCase.verifyFail("Implement the test.")
        end
        function testC(testCase)
            testCase.verifyFail("Implement the test.")
        end
    end
    methods (Test,TestTags=["Unit" "FeatureA"])
        function testD(testCase)
            testCase.verifyFail("Implement the test.")
        end
    end
    methods (Test,TestTags=["System" "FeatureA"])
        function testE(testCase)
            testCase.verifyFail("Implement the test.")
        end
    end
end

导入 HasTag 类。

import matlab.unittest.selectors.HasTag

基于 ExampleTest 类创建一个测试套件,并显示测试名称。该套件包含五个 Test 元素。

suite = testsuite("ExampleTest");
disp({suite.Name}')
    {'ExampleTest/testE'}
    {'ExampleTest/testD'}
    {'ExampleTest/testB'}
    {'ExampleTest/testC'}
    {'ExampleTest/testA'}

选择标记为 "Unit" 的所有测试。

suite1 = suite.selectIf("Tag","Unit");
disp({suite1.Name}')
    {'ExampleTest/testD'}
    {'ExampleTest/testB'}
    {'ExampleTest/testC'}

选择所有不含标记 "FeatureA" 的测试。

suite2 =  suite.selectIf(~HasTag("FeatureA"));
disp({suite2.Name}')
    {'ExampleTest/testB'}
    {'ExampleTest/testC'}
    {'ExampleTest/testA'}

选择所有没有标记的测试。

suite3 =  suite.selectIf(~HasTag);
disp({suite3.Name}')
    {'ExampleTest/testA'}

版本历史记录

在 R2014a 中推出

全部展开