Маркировка модульных тестов

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

Маркировка тестов

Чтобы задать тестовые теги, используйте массив ячеек значимых векторов символов или массива строк. Например, 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'.

Выбор и запущенные тесты

Существует три способа выбрать и запустить теговые тесты:

Запуститесь Выбрал Tests Using 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.

Выбор Tests Using TestSuite Methods

Создайте комплект тестов от класса 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'

Выбор Tests Using HasTag Selector

Создайте комплект всех тестов от классов ExampleTagClassTest и ExampleTagTest.

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'

Смотрите также

| | | |