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');

Запустите тесты параллельно. Для параллельного выполнения тестов требуется Parallel Computing 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.

The 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.

The 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.

The 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 элементы имеют совпадающее имя свойства, возвращается пустой тестовый набор. Используйте символ подстановки * для соответствия любому количеству символов. Используйте символа вопросительного знака ? чтобы соответствовать одному символу.

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

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

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

The 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 Computing Toolbox.

  • Открытый параллельный пул существует или автоматическое создание пула включено в параметрах Parallel Preferences.

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

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

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

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

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

  • assumeSignalsMatch

  • assertSignalsMatch

  • fatalAssertSignalsMatch

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

Совет

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

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

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

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

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

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

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

    • Хранение тестовых программных продуктов не поддерживается в пуле на основе потоков.

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

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

Введенный в R2013b