主要内容

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

matlab.unittest.plugins.CodeCoveragePlugin.forFolder

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

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

说明

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

plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFolder(folder,Name,Value) 使用一个或多个名称-值参量指定选项。例如,plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFolder(pwd,"IncludingSubfolders",true) 创建一个插件,该插件为当前文件夹及其任何子文件夹中的源代码生成一个 HTML 代码覆盖率报告。

示例

输入参数

全部展开

包含源代码的文件夹的名称,指定为字符串数组、字符向量或字符向量元胞数组。该值可以是相对路径,但相对路径必须在当前文件夹中。否则,该值必须为完整路径。

示例: pwd

示例: "myFolder"

示例: ["folderA" "C:\work\folderB"]

名称-值参数

全部展开

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

示例: plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFolder(pwd,IncludingSubfolders=true)

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

示例: plugin = matlab.unittest.plugins.CodeCoveragePlugin.forFolder(pwd,"IncludingSubfolders",true)

包含 folder 的子文件夹中的源代码的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,插件只对 folder 中的源代码生成报告,而忽略在其子文件夹中定义的源代码。

用于访问代码覆盖率信息的格式,指定为由 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.forFolder("myFolder", ...
    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

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

示例

全部展开

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

在当前文件夹内名为 sourceFolder 的文件夹中,创建 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 函数,请在当前文件夹内名为 testsFolder 的文件夹中创建 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

要运行测试并生成代码覆盖率报告,请首先将 sourceFolder 添加到路径中。

addpath("sourceFolder")

testsFolder 创建一个测试套件。

suite = testsuite("testsFolder");

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

import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoverageReport
runner = testrunner("textoutput");
reportFormat = CoverageReport("coverageReport");
p = CodeCoveragePlugin.forFolder("sourceFolder","Producing",reportFormat);
runner.addPlugin(p)

运行测试。在此示例中,所有测试都通过,源代码实现了完全覆盖。该插件在您当前文件夹中创建的指定文件夹 coverageReport 中生成一个交互式代码覆盖率报告。默认情况下,报告的主文件是 index.html

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

MATLAB code coverage report has been saved to:
 C:\work\coverageReport\index.html

打开报告的主文件。

open(fullfile("coverageReport","index.html"))

版本历史记录

在 R2014b 中推出

全部展开