Среда модульного тестирования MATLAB ® позволяет вам настроить исполнитель тестов с помощью классов плагинов в matlab.unittest.plugins
пакет. Можно использовать некоторые из этих классов плагинов для генерации отчетов о тестах и программных продуктов, совместимых с платформами непрерывного интегрирования (CI):
matlab.unittest.plugins.TestReportPlugin
создает плагин, который направляет исполнителю тестов на составление отчета о результатах тестирования. Используя этот плагин, вы можете создавать читаемые и архивируемые отчеты о тестах.
matlab.unittest.plugins.TAPPlugin
создает плагин, который создает поток протокола Test Anything Protocol (TAP).
matlab.unittest.plugins.XMLPlugin
создает плагин, который производит выход в стиле JUnit.
matlab.unittest.plugins.CodeCoveragePlugin
создает плагин, который формирует отчет о покрытии линии для исходного кода MATLAB.
Вы также можете генерировать CI-совместимые программные продукты, когда запускаете тестовые примеры Test™ Simulink ®. Для получения дополнительной информации смотрите Выходные результаты для систем непрерывного интегрирования (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
образец, который записывает выход в формате 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