exponenta event banner

runtests

Запустить набор тестов

Описание

results = runtests запускает все тесты в текущей папке и возвращает результаты в виде TestResult массив.

пример

results = runtests(tests) запускает указанный набор тестов.

пример

results = runtests(tests,Name,Value) запускает набор тестов с дополнительными опциями, указанными одним или несколькими Name,Value аргументы пары.

Примеры

свернуть все

Создание папки myExample в текущей рабочей папке и перейдите в эту папку.

В myExample папка, создание тестового сценария, typeTest.m.

%% Test double class
exp = 'double';
act = ones;
assert(isa(act,exp))

%% Test single class
exp = 'single';
act = ones('single');
assert(isa(act,exp))

%% Test uint16 class
exp = 'uint16';
act = ones('uint16');
assert(isa(act,exp))

В myExample папка, создание тестового сценария, sizeValueTest.m.

%% Test size
exp = [7 13];
act = ones([7 13]);
assert(isequal(size(act),exp))

%% Test values
act = ones(42);
assert(unique(act) == 1)

Выполнить все тесты в текущей папке.

runtests
Running sizeValueTest
..
Done sizeValueTest
__________

Running typeTest
...
Done typeTest
__________


ans = 

  1x5 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   5 Passed, 0 Failed, 0 Incomplete.
   0.038077 seconds testing time.

MATLAB ® провел 5 тестов. Есть 2 проходных теста отsizeValueTest и 3 прохождения тестов от typeTest.

Создайте тестовый файл, показанный ниже, и сохраните его как runtestsExampleTest.m на пути MATLAB.

function tests = runtestsExampleTest
tests = functiontests(localfunctions);

function testFunctionOne(testCase)

Запустите тесты.

results = runtests('runtestsExampleTest.m');
Running runtestsExampleTest
.
Done runtestsExampleTest
__________

Если он не существует, создайте тестовый файл, runtestsExampleTest.m, в примере выше.

Создайте подпапку, tmpTest, и, в этой папке, создать следующее runtestsExampleSubFolderTest.m файл.

function tests = runtestsExampleSubFolderTest
tests = functiontests(localfunctions);

function testFunctionTwo(testCase)

Запустите тесты из указанной выше папки tmpTest путем установки 'IncludeSubfolders' к true.

results = runtests(pwd,'IncludeSubfolders',true);
Running runtestsExampleTest
.
Done runtestsExampleTest
__________

Running runtestsExampleSubFolderTest
.
Done runtestsExampleSubFolderTest
__________

runtests выполнил тесты как в текущей папке, так и во вложенной папке.

Если не указать 'IncludeSubfolders' для свойства runtests функция не запускает тест во вложенной папке.

results = runtests(pwd);
Running runtestsExampleTest
.
Done runtestsExampleTest
__________

Когда текущая папка является корневой папкой проекта или когда вы передаете полный путь к корневой папке проекта в runtests функция, runtests запускает все тестовые файлы, содержащиеся в указанном проекте, которые помечены как Test классификация.

В этом примере предполагается, что папка проекта в C:/projects/project1 содержит тестовые файлы, помеченные Test классификация. Измените текущую папку на корневую папку проекта и запустите тесты в проекте.

cd 'C:/projects/project1/'
runtests

Кроме того, можно запустить тесты, открыв project1. Закройте проект по завершении.

proj = openProject('C:/projects/project1/');
runtests
close(proj)

В качестве другой альтернативы запустите тесты в проекте, передав полный путь к корневой папке проекта в runtests.

runtests('C:/projects/project1/')

Создайте следующий тестовый файл и сохраните его как runInParallelTest.m на пути MATLAB ®.

function tests = runInParallelTest
tests = functiontests(localfunctions);

function testA(testCase)
verifyEqual(testCase,5,5);

function testB(testCase)
verifyTrue(testCase,logical(1));

function testC(testCase)
verifySubstring(testCase,'SomeLongText','Long');

function testD(testCase)
verifySize(testCase,ones(2,5,3),[2 5 3]);

function testE(testCase)
verifyGreaterThan(testCase,3,2);

function testF(testCase)
verifyEmpty(testCase,{},'Cell array is not empty.');

function testG(testCase)
verifyMatches(testCase,'Some Text','Some [Tt]ext');

Выполняйте тесты параллельно. Для параллельного выполнения тестов требуется Toolbox™ параллельных вычислений. Структура тестирования может изменять порядок и количество групп или включать тесты в каждую группу.

results = runtests('runInParallelTest','UseParallel',true);
Split tests into 7 groups and running them on 4 workers.
----------------
Finished Group 2
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 3
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 1
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 4
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 6
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 5
----------------
Running runInParallelTest
.
Done runInParallelTest
__________


----------------
Finished Group 7
----------------
Running runInParallelTest
.
Done runInParallelTest
__________

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

Полный набор тестов содержит 11 тестовых элементов: 6 из testClass метод, 2 из testSize метод и 1 каждый из testDefaultClass, testDefaultSize, и testDefaultValue методы.

В командной строке выполните все параметризации для testSize способ.

runtests('testZeros/testSize')
Running testZeros
..
Done testZeros
__________


ans = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.036647 seconds testing time.

runtests выполнила два параметризованных теста из testSize способ. Кроме того, можно указать имя процедуры тестирования с помощью runtests('testZeros','ProcedureName','testSize').

Запустите тестовые элементы, которые используют outSize свойство параметра.

runtests('testZeros','ParameterProperty','outSize')
Running testZeros
........
Done testZeros
__________


ans = 

  1x8 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   8 Passed, 0 Failed, 0 Incomplete.
   0.051305 seconds testing time.

runtests функция выполнила восемь тестов, которые используют outSize свойство параметра: шесть из testClass метод и два из testSize способ.

Запустите тестовые элементы, которые используют single имя параметра.

runtests('testZeros','ParameterName','single')
Running testZeros
..
Done testZeros
__________


ans = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.009638 seconds testing time.

runtests функция выполнила два теста из testClass метод, который использует outSize имя параметра.

Входные аргументы

свернуть все

Набор тестов, указанный как строковый массив, символьный вектор или массив ячеек символьных векторов. Каждый вектор символов в массиве ячеек может содержать имя тестового файла, тестовый класс, имя элемента тестового набора, пакет, содержащий тестовые классы, папку, содержащую тестовые файлы, или папку проекта, содержащую тестовые файлы.

Пример: runtests('ATestFile.m')

Пример: runtests('ATestFile/aTest')

Пример: runtests('mypackage.MyTestClass')

Пример: runtests(pwd)

Пример: runtests({'mypackage.MyTestClass','ATestFile.m',pwd,'mypackage.subpackage'})

Пример: runtests('C:/projects/project1/')

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

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: runtests(tests,'Name','productA_*') запускает тестовые элементы с именем, начинающимся с 'productA_'.

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

Индикатор для применения возможностей отладки при выполнении tests, указано как false или true (0 или 1). Например, при возникновении сбоя теста фреймворк приостанавливает выполнение теста для перехода в режим отладки.

Индикатор для выполнения тестов во вложенных папках, указанный как false или true (0 или 1). По умолчанию платформа выполняет тесты в указанных папках, но не во вложенных папках.

Индикатор для выполнения тестов в подпакетах, указанный как false или true (0 или 1). По умолчанию платформа выполняет тесты в указанных пакетах, но не в их подпакетах.

Индикатор для включения тестов из ссылочных проектов, указанный как логический false или true. Дополнительные сведения о проектах, на которые имеются ссылки, см. в разделе Компонентные крупные проекты.

Максимальный уровень детализации для регистрируемой диагностики, включенной в тестовый запуск, указанный как целое значение от 0 до 4 или как matlab.unittest.Verbosity объект перечисления. runtests функция включает диагностику, которая регистрируется на этом уровне и ниже. Целочисленные значения соответствуют членам matlab.unittest.Verbosity перечисление.

По умолчанию runtests включает диагностику, зарегистрированную в matlab.unittest.Verbosity.Terse уровень (уровень 1). Чтобы исключить диагностику в журнале, укажите LoggingLevel как Verbosity.None (уровень 0).

Диагностика в журнале - это диагностика, поставляемая в среду тестирования с вызовом log (TestCase) или log (Fixture) способ.

Числовое представлениеИмя элемента перечисленияПодробное описание
0None

Нет информации

1Terse

Минимальная информация

2Concise

Умеренный объем информации

3Detailed

Некоторая дополнительная информация

4Verbose

Много дополнительной информации

Уровень отображения сведений о событии, указанный как целое значение от 0 до 4 или как matlab.unittest.Verbosity объект перечисления. Целочисленные значения соответствуют членам matlab.unittest.Verbosity перечисление.

runtests функция отображает сбойные и зарегистрированные события с объемом детализации, указанным в OutputDetail. По умолчанию runtests отображает сбойные и зарегистрированные события в matlab.unittest.Verbosity.Detailed уровень (уровень 3) и ход тестового запуска на matlab.unittest.Verbosity.Concise уровень (уровень 2).

Числовое представлениеИмя элемента перечисленияПодробное описание
0None

Нет информации

1Terse

Минимальная информация

2Concise

Умеренный объем информации

3Detailed

Некоторая дополнительная информация

4Verbose

Много дополнительной информации

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

Имя свойства класса теста, определяющего параметр, используемый элементом набора тестов, указанный как строковый массив, символьный вектор или массив ячеек символьных векторов. Фильтры аргументов TestSuite элементы массива. Чтобы структура тестирования включала тест в набор, Parameterization имущества Test элемент должен содержать хотя бы одно из имен свойств, указанных ParameterProperty. Если ни один из Test элементы имеют соответствующее имя свойства, возвращается пустой набор тестов. Использовать подстановочный символ * для соответствия любому количеству символов. Использовать знак вопроса ? соответствует одному символу.

Имя параметра, используемого элементом набора тестов, заданного как строковый массив, символьный вектор или массив ячеек символьных векторов. MATLAB генерирует имена параметров на основе свойства класса теста, определяющего параметры:

  • Если значение свойства является массивом ячеек символьных векторов, MATLAB генерирует имена параметров из значений в массиве ячеек. В противном случае MATLAB определяет имена параметров как value1, value2, …, valueN.

  • Если значением свойства является структура, MATLAB генерирует имена параметров из полей структуры.

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

Имя процедуры тестирования, указанное как строковый массив, символьный вектор или массив ячеек символьных векторов. Фильтры аргументов TestSuite элементы массива. Чтобы структура тестирования включала тест в набор, ProcedureName имущества Test элемент должен соответствовать одному из имен процедур, указанных в ProcedureName. Если ни один из Test элементы имеют соответствующее имя процедуры, возвращается пустой набор тестов. Использовать подстановочный символ * для соответствия любому количеству символов. Использовать знак вопроса ? для соответствия одному символу.

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

Путь к исходному коду для включения в отчет о покрытии кода, указанный как строковый массив, символьный вектор или массив ячеек символьных векторов. Использование этой опции с runtests выполняет указанные тесты и создает отчет о покрытии кода для указанных файлов кода. Отчет показывает, какие строки в исходном коде были выполнены тестами.

Исходный код может быть абсолютным или относительным путем к одной или нескольким папкам или файлам, имеющим .m, .mlx, или .mlapp расширение.

Пример: runtests(tests,'ReportCoverageFor','mySource.m')

Типы данных: char | string | cell

Индикатор для применения строгих проверок при выполнении tests, указано как false или true (0 или 1). Например, если в ходе теста выдается предупреждение, в системе генерируется сбой квалификации.

Имя класса, от которого происходит тестовый класс, указанное как строковый массив, символьный вектор или массив ячеек символьных векторов. Фильтры аргументов TestSuite элементы массива. Чтобы структура тестирования включала тест в набор, TestClass имущества Test элемент должен указывать на тестовый класс, производный от одного из классов, указанных Superclass. Если ни один из Test элементы соответствуют классу, возвращается пустой набор тестов.

Имя тега теста, используемого элементом набора тестов, заданного как строковый массив, символьный вектор или массив ячеек символьных векторов. Фильтры аргументов TestSuite элементы массива. Чтобы структура тестирования включала тест в набор, Tags имущества Test элемент должен содержать хотя бы одно из имен тегов, указанных Tag. Если ни один из Test элементы имеют соответствующее имя тега, возвращается пустой набор тестов. Использовать подстановочный символ * для соответствия любому количеству символов. Использовать знак вопроса ? для соответствия одному символу.

Индикатор для параллельного выполнения испытаний, указанный как false или true (0 или 1).

По умолчанию runtests запускает тесты в серийном формате. Если установить UseParallel кому true, то runtests разделяет набор тестов на отдельные группы и запускает группы параллельно, если:

  • Установлена панель инструментов параллельных вычислений.

  • Существует открытый параллельный пул или включено автоматическое создание пула в окне Настройки параллельного пула (Parallel Preferences).

В противном случае runtests запускает тесты в серийном формате независимо от значения для UseParallel.

Параллельное тестирование может быть несовместимо с другими параметрами. Например, тестирование выполняется в серийном формате, если UseParallel и Debug оба имеют значение true. При параллельном выполнении инфраструктура тестирования может изменять порядок и количество групп или включать тесты в каждую группу.

Индикатор для создания или обновления MAT-файла, используемого в тесте с определенными методами квалификации, указанный как false или true (0 или 1) . Для использования необходимо установить Test™ Simulink ®GenerateBaselines.

При указании этого аргумента как true, ваш тест должен использовать по крайней мере один из этих методов квалификации sltest.TestCase (Simulink Test) класс:

  • verifySignalsMatch (например, testCase.verifySignalsMatch(actVal,'myBaseline.mat'))

  • assumeSignalsMatch

  • assertSignalsMatch

  • fatalAssertSignalsMatch

Дополнительные сведения см. в разделе Использование Simulink-тестов на основе MATLAB в диспетчере тестов (Simulink Test).

Совет

  • При использовании общих тестовых приборов в тестах и указании входных данных для runtests функционирует как строковый массив или массив ячеек символьных векторов, тестовый фреймворк сортирует массив, чтобы уменьшить общую настройку приспособления и операции обрыва. В результате тесты могут выполняться в порядке, отличном от порядка элементов во входном массиве. Дополнительные сведения см. в разделе sortByFixtures.

  • Начиная с R2020b, можно создавать автономные приложения, поддерживающие параллельное выполнение тестов (требуется MATLAB Compiler™ и Parallel Computing Toolbox). Использовать директиву %#function parallel.Pool в коде, чтобы компилятор MATLAB мог находить и упаковывать все компоненты, необходимые для параллельного выполнения тестов. Дополнительные сведения см. в разделе Компиляция модульных тестов MATLAB.

  • Начиная с R2021a, можно запустить тесты пула на основе потоков (требуется панель инструментов параллельных вычислений), запустив параллельный пул рабочих потоков и вызвав runtests функции с помощью UseParallel аргумент пары имя-значение.

    Тесты для запуска с runtests в пуле на основе потоков действуют следующие ограничения:

    • В тесте и исходном коде должны использоваться только функциональные возможности, поддерживаемые работниками потоков. Дополнительные сведения об ограничениях среды на основе потоков см. в разделе Выбор среды на основе потоков и среды на основе процессов (панель инструментов параллельных вычислений).

    • Папка, определяющая содержимое теста, должна находиться в пути поиска MATLAB.

    • Имена тестов должны указываться с использованием имен классов или функций без расширений файлов.

    • Хранение артефактов теста не поддерживается в пуле на основе потоков.

    • Simulink не поддерживается в среде на основе потоков. Поэтому тесты, созданные с помощью Simulink Test, не могут выполняться в пуле на основе потоков.

Расширенные возможности

Представлен в R2013b