使用 MATLAB 单元测试插件生成工件
MATLAB® 单元测试框架使您能够使用 matlab.unittest.plugins 命名空间中的插件类自定义您的测试运行器。您可以使用其中一些插件类来生成测试报告和与持续集成 (CI) 平台兼容的工件:
matlab.unittest.plugins.TestReportPlugin创建一个插件,它指示测试运行器生成测试结果报告。使用此插件,您可以生成可读且可存档的测试报告。matlab.unittest.plugins.TAPPlugin创建一个生成 Test Anything Protocol (TAP) 流的插件。matlab.unittest.plugins.XMLPlugin创建一个生成 JUnit 样式的 XML 输出的插件。matlab.unittest.plugins.CodeCoveragePlugin创建一个为 MATLAB 源代码生成代码覆盖率报告的插件。
当您运行 Simulink® Test™ 测试用例时,您也可以生成 CI 兼容的工件。有关详细信息,请参阅持续集成系统的输出结果 (Simulink Test)。
使用自定义测试运行器运行测试
此示例说明如何创建一个测试套件和自定义测试运行器,以报告测试运行进度和生成 CI 兼容的工件。
在当前文件夹内的一个文件中,创建函数 quadraticSolver,该函数返回二次多项式的根。
function r = 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 r(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a); r(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");
使用matlab.unittest.TestRunner.withTextOutput方法创建一个生成输出的 TestRunner 实例。此方法使您能够设置记录诊断的最高详细级别和测试事件详细信息的显示级别。在此示例中,测试运行器在 matlab.automation.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 样式的 XML 输出写入文件 junittestresults.xml。然后,将该插件添加到测试运行器中。
import matlab.unittest.plugins.XMLPlugin xmlFile = "junittestresults.xml"; p2 = XMLPlugin.producingJUnitFormat(xmlFile); runner.addPlugin(p2)
创建一个插件,它为文件 quadraticSolver.m 中的源代码输出 Cobertura 代码覆盖率报告。指示插件将其输出写入文件 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.016834 seconds
Running SolverTest/imaginarySolution
Done SolverTest/imaginarySolution in 0.0043659 seconds
Running SolverTest/nonnumericInput
Done SolverTest/nonnumericInput in 0.0086213 seconds
Tearing down SolverTest
Done tearing down SolverTest in 0 seconds
Done SolverTest in 0.029822 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:
C:\work\testreport.pdf
results =
1×3 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
3 Passed, 0 Failed, 0 Incomplete.
0.029822 seconds testing time.
列出当前文件夹中的文件。三个指定的工件存储在您的当前文件夹中。
dir
. .. GenerateArtifactsUsingMATLABUnitTestPluginsExample.m SolverTest.m cobertura.xml html junittestresults.xml metadata quadraticSolver.m testreport.pdf
您可以在 CI 平台上处理生成的工件。您还可以查看生成的工件的内容。例如,打开 PDF 测试报告。
open("testreport.pdf")
另请参阅
类
matlab.unittest.TestRunner|matlab.unittest.plugins.XMLPlugin|matlab.unittest.plugins.TAPPlugin|matlab.unittest.plugins.CodeCoveragePlugin|matlab.unittest.plugins.TestReportPlugin
命名空间
主题
- 使用持续集成模式开发和集成软件
- 在 CI 平台上与 MATLAB 的持续集成
- 持续集成系统的输出结果 (Simulink Test)