Main Content

matlab.unittest.plugins.codecoverage.CoverageResult Class

Namespace: matlab.unittest.plugins.codecoverage

Format for programmatic access to code coverage results

Since R2023a

Description

The matlab.unittest.plugins.codecoverage.CoverageResult class provides a way to programmatically access code coverage results. To collect and programmatically access the coverage results, create a CodeCoveragePlugin instance using a CoverageResult object, and then add the plugin to the test runner. After the test run, the Result property of the CoverageResult object holds the collected coverage results.

The matlab.unittest.plugins.codecoverage.CoverageResult class is a handle class.

Creation

Description

example

format = matlab.unittest.plugins.codecoverage.CoverageResult creates a CoverageResult object that instructs CodeCoveragePlugin to collect code coverage results that can be programmatically accessed.

Properties

expand all

Code coverage results collected during the test run, returned as a matlab.coverage.Result array. Each element of the array provides information about one of the files in the source code that was covered by the tests.

Attributes:

GetAccess
public
SetAccess
private

Examples

collapse all

Run a suite of tests and collect the code coverage result. Then, retrieve information about statement coverage 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 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

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 SolverTest class.

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 quadraticSolver.m.

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.

runner.run(suite);
Running SolverTest
...
Done SolverTest
__________

Access the statement coverage summary. The returned vector indicates that all four statements in the source code were executed by the tests.

result = format.Result;
summary = coverageSummary(result,"statement")
summary = 1×2

     4     4

Use the description of the code coverage analysis to retrieve the execution count for each statement.

[~,description] = coverageSummary(result,"statement")
description = struct with fields:
    statement: [1×4 struct]

disp([description.statement.ExecutionCount])
   3   1   2   2

Version History

Introduced in R2023a