Модульные тесты тегов

Можно использовать тестовые теги, чтобы сгруппировать тесты по категориям и затем запустить тесты с заданными тегами. Типичные тестовые теги идентифицируют конкретную функцию или описывают тип теста.

Тесты тегов

Чтобы задать тестовые теги, используйте массив ячеек из значимых векторов символов или строковые массивы. Для примера, TestTags = {'Unit'} или TestTags = ["Unit","FeatureA"].

  • Чтобы пометить отдельные тесты, используйте TestTags атрибут метода.

  • Чтобы пометить все тесты в классе, используйте TestTags атрибут класса. Если вы используете TestTags атрибут класса в суперклассе, тесты в подклассах наследуют теги.

Этот пример теста класса, ExampleTagTest, использует TestTags атрибут метода для тега отдельных тестов.

classdef ExampleTagTest < 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

Несколько тестов в ExampleTagTest классов помечены. Для примера, testD помечен тегами 'Unit' и 'FeatureA'. Один тест, testA, не помечен.

Этот пример теста класса, ExampleTagClassTest, использует TestTags атрибут класса для пометки всех тестов в классе и TestTags атрибут метода для добавления тегов к отдельным тестам.

classdef (TestTags = {'FeatureB'}) ...
        ExampleTagClassTest < matlab.unittest.TestCase
    methods (Test)
        function testF (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'FeatureC','System'})
        function testG (testCase)
            % test code
        end
    end
    methods (Test, TestTags = {'System','FeatureA'})
        function testH (testCase)
            % test code
        end
    end
end

Каждый тест в ExampleTagClassTest классов помечен тегами 'FeatureB'. Кроме того, отдельные тесты помечены различными тегами, включая 'FeatureA', 'FeatureC', и 'System'.

Выбор и запуск тестов

Существует три способа выбора и выполнения тестов с тегами:

Запуск выбранных тестов с использованием runtests

Используйте runtests функция для выбора и запуска тестов без явного создания тестового набора. Выберите и запустите все тесты из ExampleTagTest и ExampleTagClassTest которые включают в себя 'FeatureA' тег.

results = runtests({'ExampleTagTest','ExampleTagClassTest'},'Tag','FeatureA');
Running ExampleTagTest
..
Done ExampleTagTest
__________

Running ExampleTagClassTest
.
Done ExampleTagClassTest
__________

runtests выбрали и провели три теста.

Отображение результатов в таблице.

table(results)
ans =

  3×6 table

               Name                Passed    Failed    Incomplete     Duration       Details   
    ___________________________    ______    ______    __________    __________    ____________

    'ExampleTagTest/testE'         true      false     false         0.00039529    [1×1 struct]
    'ExampleTagTest/testD'         true      false     false         0.00045658    [1×1 struct]
    'ExampleTagClassTest/testH'    true      false     false         0.00043899    [1×1 struct]

Выбранные тесты testE и testD от ExampleTagTest, и testH от ExampleTagClassTest.

Выберите тесты с использованием TestSuite Методы

Создайте набор тестов из ExampleTagTest классы с тегами 'FeatureA'.

import matlab.unittest.TestSuite
sA = TestSuite.fromClass(?ExampleTagTest,'Tag','FeatureA');

Создайте набор тестов из ExampleTagClassTest классы с тегами 'FeatureC'.

sB = TestSuite.fromFile('ExampleTagClassTest.m','Tag','FeatureC');

Сгруппируйте набор и просмотрите имена тестов.

suite = [sA sB];
{suite.Name}'
ans =

  3×1 cell array

    'ExampleTagTest/testE'
    'ExampleTagTest/testD'
    'ExampleTagClassTest/testG'

Выберите тесты с использованием HasTag Отборщик

Создайте набор всех тестов из ExampleTagTest и ExampleTagClassTest классы.

import matlab.unittest.selectors.HasTag
sA = TestSuite.fromClass(?ExampleTagTest);
sB = TestSuite.fromFile('ExampleTagClassTest.m');
suite = [sA sB];

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

s1 =  suite.selectIf(~HasTag)
s1 = 

  Test with properties:

                  Name: 'ExampleTagTest/testA'
         ProcedureName: 'testA'
             TestClass: "ExampleTagTest"
            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.

Выберите все тесты с 'Unit' тег и отобразить их имена.

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

  3×1 cell array

    'ExampleTagTest/testD'
    'ExampleTagTest/testB'
    'ExampleTagTest/testC'

Выберите все тесты с 'FeatureB' или 'System' тег с использованием ограничения.

import matlab.unittest.constraints.IsEqualTo
constraint = IsEqualTo('FeatureB') | IsEqualTo('System');
s3 = suite.selectIf(HasTag(constraint));
{s3.Name}'
ans =

  4×1 cell array

    'ExampleTagTest/testE'
    'ExampleTagClassTest/testH'
    'ExampleTagClassTest/testG'
    'ExampleTagClassTest/testF'

См. также

| | | |