Main Content

使用 MATLAB 单元测试插件生成工件

MATLAB® 单元测试框架使您能够使用 matlab.unittest.plugins 命名空间中的插件类自定义您的测试运行器。您可以使用其中一些插件类来生成测试报告和与持续集成 (CI) 平台兼容的工件:

当您运行 Simulink® Test™ 测试用例时,您也可以生成 CI 兼容的工件。有关详细信息,请参阅Output Results for Continuous Integration Systems (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")

另请参阅

命名空间

相关主题