主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

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

用于访问代码覆盖率信息的格式,指定为由 matlab.unittest.plugins.codecoverage.CoverageFormat 对象组成的行向量。如果您指定多个 CoverageFormat 对象,插件支持访问每个对应覆盖率格式的信息。

插件支持以下 CoverageFormat 子类:

示例: 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)

自 R2024b 起

要应用的覆盖率过滤器的位置,指定为字符串数组、字符向量或字符向量元胞数组。如果您有 MATLAB Test 许可证,可以使用此参量指定一个 MAT 文件,该文件包含先前为在测源代码创建的覆盖率过滤器。该值可以是相对于当前文件夹的路径,也可以是绝对路径。

例如,假设您先前为源代码的缺失覆盖率进行了申述并将该申述保存到了当前文件夹中名为 myFilters.mat 的文件中。使用 myFilters.mat 中的现有 matlabtest.coverage.Justification 对象,运行您的测试并生成交互式 HTML 代码覆盖率报告,该报告过滤测试未执行的代码块。

import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoverageReport

runner = testrunner("textoutput");
format = CoverageReport("report");
plugin = CodeCoveragePlugin.forFile("myFile.m", ...
    Producing=format,MetricLevel="mcdc",Filter="myFilters.mat");
runner.addPlugin(plugin)

suite = testsuite("MyTestClass");
results = runner.run(suite);

注意

如果您使用 MATLAB 工程来组织工作,则不需要指定 Filter 参量。测试框架自动应用存储在工程中的覆盖率过滤器。

示例: Filter="myFilters.mat"

示例: Filter="C:\work\myFilters.mat"

属性

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 中推出

全部展开