Среда модульного тестирования MATLAB® позволяет вам настроить своего исполнителя тестов с помощью сменных классов в matlab.unittest.plugins
пакет. Можно использовать некоторые из этих сменных классов, чтобы сгенерировать протоколы испытаний и артефакты, совместимые с платформами непрерывного интегрирования (CI):
matlab.unittest.plugins.TestReportPlugin
создает плагин, который направляет исполнителя тестов, чтобы представить отчет результата испытаний. Используя этот плагин, можно произвести читаемые и archivable протоколы испытаний.
matlab.unittest.plugins.TAPPlugin
создает плагин, который производит поток Test Anything Protocol (TAP).
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.3788 seconds Running SolverTest/imaginarySolution Done SolverTest/imaginarySolution in 0.017528 seconds Running SolverTest/nonnumericInput Done SolverTest/nonnumericInput in 0.18399 seconds Tearing down SolverTest Done tearing down SolverTest in 0 seconds Done SolverTest in 0.58032 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/BR2021bd_1751886_255755/mlx_to_docbook55/tp01f928d5/matlab-ex57066699/testreport.pdf
results = 1x3 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 3 Passed, 0 Failed, 0 Incomplete. 0.58032 seconds testing time.
Перечислите файлы в своей текущей папке. Три заданных артефакта хранятся в вашей текущей папке.
dir
. .. GenerateArtifactsUsingMATLABUnitTestPluginsExample.mlx SolverTest.m cobertura.xml junittestresults.xml quadraticSolver.m testreport.pdf
Можно обработать сгенерированные артефакты на платформах CI. Также можно просмотреть содержимое сгенерированных артефактов. Например, откройте протокол испытаний PDF.
open('testreport.pdf')
matlab.unittest.TestRunner
| matlab.unittest.plugins Package
| matlab.unittest.plugins.TAPPlugin
| matlab.unittest.plugins.XMLPlugin
| matlab.unittest.plugins.CodeCoveragePlugin
| matlab.unittest.plugins.TestReportPlugin