Платформа модульного тестирования MATLAB ® позволяет настраивать тестовый питатель с помощью классов плагинов в matlab.unittest.plugins пакет. Некоторые из этих классов плагинов можно использовать для создания отчетов о тестировании и артефактов, совместимых с платформами непрерывной интеграции (CI):
matlab.unittest.plugins.TestReportPlugin создает подключаемый модуль, который управляет тестовым питателем для создания отчета о результатах теста. С помощью этого плагина можно создавать читаемые и архивируемые отчеты о тестах.
matlab.unittest.plugins.TAPPlugin создает плагин, который создает поток протокола TAP (Test Anything Protocol).
matlab.unittest.plugins.XMLPlugin создает подключаемый модуль, который создает вывод XML в стиле JUnit.
matlab.unittest.plugins.CodeCoveragePlugin создает подключаемый модуль, который создает отчет о покрытии линии для исходного кода MATLAB.
Можно также создавать CI-совместимые артефакты при запуске тестов Simulink ® Test™. Дополнительные сведения см. в разделе Выходные результаты для систем непрерывной интеграции (Simulink Test).
В этом примере показано, как создать тестовый набор и настроить тестовый питатель для создания отчета о ходе тестового запуска и создания CI-совместимых артефактов.
В файле в текущей папке создайте функцию quadraticSolver, который возвращает корни квадратичных многочленов.
function roots = quadraticSolver(a,b,c) % quadraticSolver returns solutions to the % quadratic equation a*x^2 + b*x + c = 0. if ~isa(a,'numeric') || ~isa(b,'numeric') || ~isa(c,'numeric') error('quadraticSolver:InputMustBeNumeric', ... 'Coefficients must be numeric.'); end roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a); roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a); end
Проверить quadraticSolver, создайте класс теста SolverTest в текущей папке.
classdef SolverTest < matlab.unittest.TestCase methods(Test) function realSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2,1]; testCase.verifyEqual(actSolution,expSolution) end function imaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i, -1-3i]; testCase.verifyEqual(actSolution,expSolution) end function nonnumericInput(testCase) testCase.verifyError(@()quadraticSolver(1,'-3',2), ... 'quadraticSolver:InputMustBeNumeric') end end end
В командной строке создайте набор тестов из SolverTest класс.
suite = testsuite('SolverTest');Создать TestRunner экземпляр, который создает выходные данные с помощью matlab.unittest.TestRunner.withTextOutput способ. Этот метод позволяет установить максимальный уровень детализации для регистрируемой диагностики и уровень отображения для подробной информации о тестовом событии. В этом примере тестовый питатель отображает ход выполнения теста в matlab.unittest.Verbosity.Detailed уровень (уровень 3).
import matlab.unittest.TestRunner runner = TestRunner.withTextOutput('OutputDetail',3);
Создать TestReportPlugin экземпляр, который отправляет выходные данные в файл testreport.pdf и добавьте подключаемый модуль в тестовый питатель.
import matlab.unittest.plugins.TestReportPlugin pdfFile = 'testreport.pdf'; p1 = TestReportPlugin.producingPDF(pdfFile); runner.addPlugin(p1)
Создание XMLPlugin экземпляр, записывающий вывод XML в формате JUnit в файл junittestresults.xml. Затем добавьте подключаемый модуль в тестовый питатель.
import matlab.unittest.plugins.XMLPlugin xmlFile = 'junittestresults.xml'; p2 = XMLPlugin.producingJUnitFormat(xmlFile); runner.addPlugin(p2)
Создание подключаемого модуля, который выводит отчет о покрытии кода Cobertura для исходного кода в файле quadraticSolver.m. Поручить плагину записать его выходные данные в файл cobertura.xml и добавьте подключаемый модуль в тестовый питатель.
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoberturaFormat sourceCodeFile = 'quadraticSolver.m'; reportFile = 'cobertura.xml'; reportFormat = CoberturaFormat(reportFile); p3 = CodeCoveragePlugin.forFile(sourceCodeFile,'Producing',reportFormat); runner.addPlugin(p3)
Запустите тесты.
results = runner.run(suite)
Running SolverTest
Setting up SolverTest
Done setting up SolverTest in 0 seconds
Running SolverTest/realSolution
Done SolverTest/realSolution in 0.36683 seconds
Running SolverTest/imaginarySolution
Done SolverTest/imaginarySolution in 0.016272 seconds
Running SolverTest/nonnumericInput
Done SolverTest/nonnumericInput in 0.17842 seconds
Tearing down SolverTest
Done tearing down SolverTest in 0 seconds
Done SolverTest in 0.56153 seconds
__________
Generating test report. Please wait.
Preparing content for the test report.
Adding content to the test report.
Writing test report to file.
Test report has been saved to:
/tmp/BR2021ad_1630854_168990/mlx_to_docbook54/tpd01fe35a/matlab-ex57066699/testreport.pdf
results =
1x3 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
3 Passed, 0 Failed, 0 Incomplete.
0.56153 seconds testing time.
Перечислите файлы в текущей папке. Три указанных артефакта хранятся в текущей папке.
dir
. .. GenerateArtifactsUsingMATLABUnitTestPluginsExample.mlx SolverTest.m cobertura.xml junittestresults.xml quadraticSolver.m testreport.pdf
Созданные артефакты можно обработать на платформах CI. Также можно просмотреть содержимое созданных артефактов. Например, откройте отчет о тестировании PDF.
open('testreport.pdf')matlab.unittest.plugins Package | matlab.unittest.plugins.CodeCoveragePlugin | matlab.unittest.plugins.TAPPlugin | matlab.unittest.plugins.TestReportPlugin | matlab.unittest.plugins.XMLPlugin | matlab.unittest.TestRunner