selectIf

Класс: matlab.unittest.
Пакет: matlab.unittest

Выберите элементы тестового набора, которые удовлетворяют условия

Синтаксис

newsuite = selectIf(suite,s)
newsuite = selectIf(suite,Name,Value)

Описание

пример

newsuite = selectIf(suite,s) выбирает из suite тестовые элементы, которые удовлетворяют условия, заданные селектором, s, и возвращает их в массиве TestSuite, newsuite.

пример

newsuite = selectIf(suite,Name,Value) создает массив TestSuite с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value.

Входные параметры

suite

Набор тестов, заданных как массив matlab.unittest.TestSuite.

s

Селектор, заданный как экземпляр класса от пакета matlab.unittest.selector.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

'BaseFolder'

Вектор символов, указывающий на имя папки, которая содержит тесты. Этот аргумент фильтрует элементы массива TestSuite. Для тестового элемента, который будет включен в комплект, тестовый элемент должен содержаться в заданной основной папке. Используйте символ подстановки *, чтобы соответствовать любому количеству символов. Используйте символ вопросительного знака, ?, чтобы соответствовать точно к одному символу. Для тестов, заданных в пакетах, основная папка является родительским элементом папки пакета верхнего уровня.

'Name'

Вектор символов, указывающий на имя элемента комплекта. Этот аргумент фильтрует элементы массива TestSuite. Чтобы включать тестовый элемент в комплект, свойство Name тестового элемента должно совпадать с указанным именем. Используйте символ подстановки *, чтобы соответствовать любому количеству символов. Используйте символ вопросительного знака, ?, чтобы соответствовать точно к одному символу.

'ParameterName'

Вектор символов, указывающий на имя параметра, используется элементом тестового набора. Этот аргумент фильтрует элементы массива TestSuite. Используйте символ подстановки *, чтобы соответствовать любому количеству символов. Используйте символ вопросительного знака, ?, чтобы соответствовать точно к одному символу.

'ParameterProperty'

Вектор символов, указывающий на имя свойства, которое задает параметр, используемый элементом тестового набора. Этот аргумент фильтрует элементы массива TestSuite. Используйте символ подстановки *, чтобы соответствовать любому количеству символов. Используйте символ вопросительного знака, ?, чтобы соответствовать точно к одному символу.

'ProcedureName'

Имя процедуры тестирования, заданной как вектор символов или скаляр строки. Этот аргумент фильтрует элементы массива TestSuite. Используйте символ подстановки *, чтобы соответствовать любому количеству символов. Используйте символ вопросительного знака, ?, чтобы соответствовать точно к одному символу.

В основанном на классах тесте ProcedureName является именем метода тестирования. В функциональном тест это - имя локальной функции, которая содержит тест. В тесте на основе скриптов это - имя, сгенерированное из заголовка экспериментального участка. В отличие от Name, имя процедуры тестирования не включает класса или имени пакета или информации о параметризации.

'Superclass'

Имя класса, который тестовый класс выводит от, заданный как скаляр строки или вектор символов. Этот аргумент фильтрует элементы массива TestSuite.

'Tag'

Вектор символов или скаляр строки указание на имя тега применились к элементу тестового набора. Этот аргумент фильтрует элементы массива TestSuite. Этот аргумент фильтрует элементы массива TestSuite. Используйте символ подстановки *, чтобы соответствовать любому количеству символов. Используйте символ вопросительного знака, ?, чтобы совпадать точно с одним символом.

Примеры

развернуть все

В вашей рабочей папке создайте файл ExampleTest.m, содержащий следующий тестовый класс.

classdef (SharedTestFixtures={...
        matlab.unittest.fixtures.PathFixture(fullfile(...
        matlabroot, 'help', 'techdoc', 'matlab_oop', 'examples'))})...
        ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testPathAdd(testCase)
            % test code
        end
        function testOne(testCase)
            % test code
        end
         function testTwo(testCase)
            % test code
        end
    end
end

В командной строке создайте тестовый набор из класса ExampleTest.

import matlab.unittest.TestSuite;
import matlab.unittest.selectors.HasSharedTestFixture;
import matlab.unittest.selectors.HasName;
import matlab.unittest.fixtures.PathFixture;
import matlab.unittest.constraints.EndsWithSubstring;
import matlab.unittest.constraints.ContainsSubstring;

suite = TestSuite.fromClass(?ExampleTest)
suite = 

  1×3 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

Tests Include:
   0 Parameterizations, 1 Unique Shared Test Fixture Class, 0 Tags.

Тестовый набор содержит три тестовых элемента.

Создайте комплект отфильтрованного теста тестов, включающих тесты с именами, которые содержат нечувствительный к регистру текст 'pAtH'.

newSuite = selectIf(suite,HasName(ContainsSubstring('pAtH','IgnoringCase',true)))
newSuite = 

  Test with properties:

                  Name: 'ExampleTest/testPathAdd'
         ProcedureName: 'testPathAdd'
             TestClass: "ExampleTest"
            BaseFolder: 'C:\work'
      Parameterization: [0×0 matlab.unittest.parameters.EmptyParameter]
    SharedTestFixtures: [1×1 matlab.unittest.fixtures.PathFixture]
                  Tags: {1×0 cell}

Tests Include:
   0 Parameterizations, 1 Unique Shared Test Fixture Class, 0 Tags.

Только тест testPathAdd является частью комплекта.

Также создайте тот же комплект с помощью пары "имя-значение".

newSuite = selectIf(suite,'Name','*Path*');

Однако различающийся ограничение ContainsSubstring, пара "имя-значение" не имеет опции, чтобы игнорировать регистр.

Создайте отфильтрованный комплект тестов, включающих тесты, которые используют разделяемый фиксатор пути и не имеют имен, заканчивающихся 'One'.

newSuite = suite.selectIf(~HasName(EndsWithSubstring('One')) ...
    & HasSharedTestFixture(PathFixture(fullfile(matlabroot, 'help',...
    'techdoc', 'matlab_oop', 'examples'))));
{newSuite.Name}
ans = 

    'ExampleTest/testPathAdd'    'ExampleTest/testTwo'

Тестовый набор содержит два теста. Все тесты используют заданный фиксатор пути, но тест под названием 'testOne' исключен из комплекта.

В вашей рабочей папке создайте 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

Тестовый класс содержит два параметризованных метода тестирования, testClass и testSize.

В командной строке создайте тестовый набор из файла.

s = matlab.unittest.TestSuite.fromFile('testZeros.m');
{s.Name}'
ans =

  11×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=single,outSize=s3d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s3d)'}
    {'testZeros/testSize(outSize=s2d)'             }
    {'testZeros/testSize(outSize=s3d)'             }
    {'testZeros/testDefaultClass'                  }
    {'testZeros/testDefaultSize'                   }
    {'testZeros/testDefaultValue'                  }

Комплект содержит 11 тестовых элементов. Шесть из параметризованного метода testClass, два из параметризованного метода testSize, и один от каждого testDefaultClass, testDefaultSize и методов testDefaultValue.

Выберите все тестовые элементы от параметризованных методов тестирования.

import matlab.unittest.selectors.HasParameter;

s1 = s.selectIf(HasParameter);
{s1.Name}'
ans =

  8×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=single,outSize=s3d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s3d)'}
    {'testZeros/testSize(outSize=s2d)'             }
    {'testZeros/testSize(outSize=s3d)'             }

Комплект содержит восемь тестовых элементов от двух параметризованных методов тестирования.

Выберите все тестовые элементы от непараметризованных методов тестирования.

s2 = s.selectIf(~HasParameter);
{s2.Name}'
ans =

  3×1 cell array

    {'testZeros/testDefaultClass'}
    {'testZeros/testDefaultSize' }
    {'testZeros/testDefaultValue'}

Выберите все тестовые элементы, которые параметризованы и имеют свойство под названием 'type' с названием параметра 'double'.

s3 = s.selectIf('ParameterProperty','type', 'ParameterName','double');
{s3.Name}'
ans =

  2×1 cell array

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

Получившийся комплект содержит два элемента. Метод testClass является единственным методом в testZeros, который использует свойство 'type' и выбор только 'double' от результатов параметров в двух тестовых элементах — один для каждого значения 'outSize'.

Выберите все тестовые элементы, которые параметризованы и имеют параметры, заданные свойством начиная с 't'.

s4 = s.selectIf('ParameterProperty','t*');
{s4.Name}'
ans =

  6×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=single,outSize=s3d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s3d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s3d)'}

Получившийся комплект содержит шесть параметризованных тестовых элементов из метода testClass. Метод testSize параметризован, но элементы из метода не включены в комплект, потому что метод не использует свойство, которое запускается с 't'.

Выберите все тестовые элементы, которые параметризованы и тестируют функцию zeros с массивом 2-D. Значение параметров, представляющее массив 2-D, будет иметь длину 1 (например, zeros(3)) или 2 (например, zeros(2,3)).

import matlab.unittest.constraints.HasLength;

s5 = s.selectIf(HasParameter('Property','outSize',...
    'Value', HasLength(1)|HasLength(2)));
{s5.Name}'
ans =

  4×1 cell array

    {'testZeros/testClass(type=single,outSize=s2d)'}
    {'testZeros/testClass(type=double,outSize=s2d)'}
    {'testZeros/testClass(type=uint16,outSize=s2d)'}
    {'testZeros/testSize(outSize=s2d)'             }

Выберите только тестовый элемент, который тестирует это, вывод является типом данных double и правильного размера для массива 2-D.

s6 = s.selectIf(HasParameter('Property','type','Name','double')...
    & HasParameter('Property','outSize','Name','s2d'))
s6 = 

  Test with properties:

                  Name: 'testZeros/testClass(type=double,outSize=s2d)'
         ProcedureName: 'testClass'
             TestClass: "testZeros"
            BaseFolder: 'C:\work'
      Parameterization: [1×2 matlab.unittest.parameters.TestParameter]
    SharedTestFixtures: [0×0 matlab.unittest.fixtures.EmptyFixture]
                  Tags: {1×0 cell}

Tests Include:
   2 Unique Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.

Создайте следующий тестовый класс в файле, ExampleTest.m, в вашей текущей рабочей папке.

classdef ExampleTest < matlab.unittest.TestCase
    methods (Test)
        function testA (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'Unit'})
        function testB (testCase)
            % test code
        end
        function testC (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'Unit','FeatureA'})
        function testD (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'System','FeatureA'})
        function testE (testCase)
            % test code
        end
    end
end

В командной строке создайте тестовый набор из класса ExampleTest и исследуйте содержимое.

import matlab.unittest.TestSuite
import matlab.unittest.selectors.HasTag

suite = TestSuite.fromClass(?ExampleTest)
suite = 

  1×5 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

Tests Include:
   0 Parameterizations, 0 Shared Test Fixture Classes, 3 Unique Tags.

Кликните по гиперссылке для 3 Unique Tags, чтобы отобразить все теги в комплекте.

       Tag    
    __________

    'FeatureA'
    'System'  
    'Unit'    

Выберите все элементы тестового набора, которые имеют тег 'Unit'.

s1 = suite.selectIf(HasTag('Unit'))
s1 = 

  1×3 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

Tests Include:
   0 Parameterizations, 0 Shared Test Fixture Classes, 2 Unique Tags.

Выберите все элементы тестового набора, которые не содержат тег 'FeatureA'.

s2 =  suite.selectIf(~HasTag('FeatureA'));
{s2.Name}
ans =

  1×3 cell array

    {'ExampleTest/testB'}    {'ExampleTest/testC'}    {'ExampleTest/testA'}

Выберите все элементы тестового набора, которые не имеют никаких тегов.

s3 =  suite.selectIf(~HasTag)
s3 = 

  Test with properties:

                  Name: 'ExampleTest/testA'
         ProcedureName: 'testA'
             TestClass: "ExampleTest"
            BaseFolder: 'C:\work'
      Parameterization: [0×0 matlab.unittest.parameters.EmptyParameter]
    SharedTestFixtures: [0×0 matlab.unittest.fixtures.EmptyFixture]
                  Tags: {1×0 cell}

Tests Include:
   0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.

Введенный в R2014a