Generate Cobertura XML report from coverage results
By default, the report provides information about line coverage. If you have a MATLAB® Test™ license, you can generate a report that includes both the line and decision (branch) coverage metrics.
results — Results of code coverage analysis
Results of the code coverage analysis, specified as a
filename — Name of code coverage report file
string scalar | character vector
Name of the code coverage report file, specified as a string scalar or character
vector ending in
.xml. The value can be a relative path, but the
relative path must be in the current folder. Otherwise, the value must be a full
Generate Cobertura XML Code Coverage Report After Running Tests
Run a suite of tests and collect the code coverage result. Then, generate a Cobertura XML code coverage report from the result.
In a file named
quadraticSolver.m in your current folder, create the
quadraticSolver function. The function takes as inputs the coefficients of a quadratic polynomial and returns the roots of that polynomial. If the coefficients are specified as nonnumeric values, the function throws an error.
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
To test the
quadraticSolver function, create the
SolverTest class in a file named
SolverTest.m in your current folder. Define three
Test methods that test the function against real solutions, imaginary solutions, and nonnumeric inputs.
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
Import the classes used in this example.
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoverageResult
Create a test suite from the
suite = testsuite("SolverTest");
Create a test runner and customize it using a plugin that provides programmatic access to the code coverage information for the source code in the file
runner = testrunner("textoutput"); format = CoverageResult; p = CodeCoveragePlugin.forFile("quadraticSolver.m",Producing=format); runner.addPlugin(p)
Run the tests. After the test run, the
Result property of
format holds the coverage result. In this example, all the tests pass and the source code receives full coverage.
Running SolverTest ... Done SolverTest __________
Generate a Cobertura XML code coverage report from the coverage result and save it as
coverageReport.xml in your current folder.
result = format.Result; filename = "coverageReport.xml"; generateCoberturaReport(result,filename)
You can process the generated code coverage report on continuous integration (CI) platforms. You also can view its contents with commands such as
Version HistoryIntroduced in R2023a
R2023b: Generate decision coverage results in Cobertura XML format
If you have a MATLAB
Test license, you can collect information on decision (branch) coverage in addition
to line coverage. To collect decision coverage information, specify the
MetricLevel name-value argument when you create a plugin using one of
the static methods of the
CodeCoveragePlugin class. For example, run your
tests and generate code coverage results in Cobertura XML format that include both the line
and decision coverage metrics for the source code in a folder.
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoverageResult suite = testsuite("MyTestClass"); runner = testrunner("textoutput"); format = CoverageResult; plugin = CodeCoveragePlugin.forFolder("myFolder", ... Producing=format,MetricLevel="decision"); runner.addPlugin(plugin) runner.run(suite); results = format.Result; generateCoberturaReport(results,"myReport.xml")
MetricLevel argument specifies which coverage types to include
in the results. This table shows the possible values of
the corresponding coverage types when reporting results in Cobertura XML format. Results in
Cobertura XML format do not support condition coverage or modified condition/decision
|Value of ||Types of Coverage Included|
|Line and decision coverage|