Main Content

matlab.unittest.plugins.CodeCoveragePlugin.forFile

类: matlab.unittest.plugins.CodeCoveragePlugin
命名空间: matlab.unittest.plugins

创建用于收集文件的代码覆盖率信息的插件

说明

plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFile(file) 可创建一个插件,用于收集指定文件中源代码的代码覆盖率信息并根据这些信息生成 HTML 代码覆盖率报告。

示例

plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFile(file,Name,Value) 使用一个或多个名称-值参量指定选项。例如,plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFile("myFile.m","Producing",matlab.unittest.plugins.codecoverage.CoberturaFormat("report.xml")) 可创建一个插件,该插件为指定文件中的源代码生成 Cobertura XML 代码覆盖率报告。

输入参数

全部展开

包含源代码的文件的名称,指定为以 .m.mlx.mlapp 结尾的字符串数组、字符向量或字符向量元胞数组。该值可以是相对路径,但相对路径必须在当前文件夹中。否则,该值必须为完整路径。您可以使用 file 指定多个文件。

示例: "myFile.m"

示例: "C:\work\myFile.m"

示例: ["fileA.m" "fileB.mlx" "C:\work\fileC.mlapp"]

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

示例: plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFile("myFile.m",Producing=matlab.unittest.plugins.codecoverage.CoberturaFormat("report.xml"))

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFile("myFile.m","Producing",matlab.unittest.plugins.codecoverage.CoberturaFormat("report.xml"))

用于访问代码覆盖率信息的格式,指定为 CoverageReport 对象、CoberturaFormat 对象、CoverageResult 对象或由这些格式对象组成的行向量。如果指定多个格式对象,插件支持访问每种格式信息。

示例: Producing=matlab.unittest.plugins.codecoverage.CoberturaFormat("report.xml")

要收集的覆盖率度量的级别,指定为下表中的值之一。默认情况下,插件会收集语句和函数覆盖率度量。

MetricLevel 的值包括的覆盖率类型
"statement"语句和函数覆盖率

"decision"(需要 MATLAB® Test™

语句、函数和决策覆盖率

"condition"(需要 MATLAB Test

语句、函数、决策和条件覆盖率

"mcdc"(需要 MATLAB Test

语句、函数、决策、条件和修正条件/决策覆盖率 (MC/DC)

有关覆盖率类型的详细信息,请参阅Types of Code Coverage for MATLAB Source Code (MATLAB Test)

属性

statictrue

要了解方法的属性,请参阅方法属性

示例

全部展开

运行一套测试,并为您的源代码生成 Cobertura XML 格式的代码覆盖率报告。

在当前文件夹的一个文件中创建 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 类。针对实数解、虚数解和非数值输入定义三个 Test 方法来测试该函数。

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");

创建一个测试运行器,并使用插件对其进行自定义,该插件为文件 quadraticSolver.m 中的源代码生成 Cobertura XML 代码覆盖率报告。指定插件将其输出写入当前文件夹中名为 coverageReport.xml 的文件。

import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoberturaFormat
runner = testrunner("textoutput");
sourceCodeFile = "quadraticSolver.m";
reportFile = "coverageReport.xml";
reportFormat = CoberturaFormat(reportFile);
p = CodeCoveragePlugin.forFile(sourceCodeFile,"Producing",reportFormat);
runner.addPlugin(p)

运行测试。在此示例中,所有测试都通过,源代码实现了完全覆盖。该插件在您的当前文件夹中生成一个 Cobertura XML 代码覆盖率报告。

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

您可以在持续集成 (CI) 平台上处理生成的代码覆盖率报告。您还可以使用 open(reportFile)disp(fileread(reportFile)) 等命令查看其内容。

版本历史记录

在 R2017b 中推出

全部展开