При написании тестов с использованием платформы модульного тестирования MATLAB ® можно создать автономное приложение (требуется MATLAB Compiler™) для выполнения тестов на целевых машинах, на которых не установлен MATLAB:
Чтобы скомпилировать код MATLAB, запустите compiler.build.standaloneApplication (Компилятор MATLAB) или mcc (Компилятор MATLAB) или используйте приложение Компилятор приложений (Компилятор MATLAB).
Для запуска автономных приложений установите среду выполнения MATLAB. (При использовании приложения Application Compiler можно решить, включать ли программу установки MATLAB Runtime installer в созданное приложение.) Дополнительные сведения см. в разделе Установка и настройка среды выполнения MATLAB (компилятор MATLAB).
Компилятор MATLAB поддерживает только модульные тесты на основе классов. (Невозможно скомпилировать модульные тесты на основе сценариев или функций.) Кроме того, компилятор MATLAB в настоящее время не поддерживает тесты, созданные с использованием платформы тестирования производительности.
В этом примере показано, как создать автономное приложение из модульных тестов и запустить созданное приложение из окна терминала (на платформе Microsoft ® Windows ®).
В файле с именем TestRand.m в текущей папке создайте класс параметризованного теста, который будет тестировать генератор случайных чисел MATLAB (см. «Сводка по определению класса»
В текущей папке создайте runMyTests функция. Эта функция создает набор тестов из TestRand класс, запускает тесты и отображает результаты теста.
function runMyTests suite = matlab.unittest.TestSuite.fromClass(?TestRand); runner = matlab.unittest.TestRunner.withNoPlugins; results = runner.run(suite); disp(results) end
Скомпилировать runMyTests в автономное приложение, запустив mcc в окне команд. Компилятор MATLAB создает приложение в текущей папке.
mcc -m runMyTests
Откройте окно терминала, перейдите в папку, в которую было упаковано автономное приложение, и запустите приложение.
C:\work>runMyTests
1x1200 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
1200 Passed, 0 Failed, 0 Incomplete.
3.11 seconds testing time.
Дополнительные сведения о создании и запуске автономных приложений см. в разделе Создание автономных приложений из MATLAB (MATLAB Compiler).
Начиная с R2020b, можно создавать автономные приложения, поддерживающие параллельное выполнение тестов (требуется Parallel Computing Toolbox™). Эта функция требует использования директивы %#function parallel.Pool в файле, который запускает тестовый запуск. %#function (Компилятор MATLAB) pragma информирует компилятор MATLAB о том, что parallel.Pool(Панель инструментов параллельных вычислений) должен быть включен в компиляцию, чтобы обеспечить доступ к параллельному пулу.
Например, рассмотрим тесты в файле TestRand.m. Для параллельного выполнения этих тестов можно создать автономное приложение, скомпилировав эту функцию.
function runMyTestsInParallel %#function parallel.Pool results = runtests('TestRand.m','UseParallel',true); disp(results) end
Скомпилировать функцию в автономное приложение с помощью mcc команда. Чтобы дать команду компилятору MATLAB включить тестовый файл в приложение, укажите имя файла с помощью -a вариант.
mcc -m runMyTestsInParallel -a TestRand.m
Этот код предоставляет полное содержимое TestRand класс.
classdef TestRand < matlab.unittest.TestCase properties (TestParameter) dim1 = createDimensionSizes; dim2 = createDimensionSizes; dim3 = createDimensionSizes; type = {'single','double'}; end methods (Test) function testRepeatable(testCase,dim1,dim2,dim3) state = rng; firstRun = rand(dim1,dim2,dim3); rng(state) secondRun = rand(dim1,dim2,dim3); testCase.verifyEqual(firstRun,secondRun); end function testClass(testCase,dim1,dim2,type) testCase.verifyClass(rand(dim1,dim2,type),type) end end end function sizes = createDimensionSizes % Create logarithmically spaced sizes up to 100 sizes = num2cell(round(logspace(0,2,10))); end
run (TestRunner) | run (TestSuite) | runInParallel | runtests | compiler.build.standaloneApplication (компилятор MATLAB) | mcc (Компилятор MATLAB)