主要内容

收集语句和函数覆盖率指标的MATLAB源代码

的实例时,可以收集和访问MATLAB®源代码的代码覆盖率信息matlab.unittest.plugins.CodeCoveragePlugin类传递给测试运行程序。在MATLAB中,使用控件创建的插件matlab.unittest.plugins.codecoverage.CoverageResultmatlab.unittest.plugins.codecoverage.CoverageReport格式对象提供关于语句和函数覆盖率的信息。有关语句和函数覆盖的详细信息,请参见MATLAB源代码的代码覆盖类型

此示例演示如何收集、以编程方式访问并生成文件中源代码的报告,其中包括语句和函数覆盖率信息。该文件定义QuadraticPolynomial类,它表示二次多项式。类构造函数首先验证多项式的系数是数值,然后使用这些值初始化类属性。该类包括解决方法返回指定二次多项式的根,而情节方法来围绕其对称轴绘制多项式。的完整代码QuadraticPolynomial,请参阅QuadraticPolynomial类定义

运行测试并分析代码覆盖率信息

在当前文件夹中,保存QuadraticPolynomial类的定义QuadraticPolynomial.m.然后,创建QuadraticPolynomialTest1在当前文件夹中测试类。添加两个测试类的方法解决方法对实解和虚解。

classdefquadraticpolynomial ialtest1 < matlab.unittest.TestCase方法(测试)函数realSolution(testCase) p =二次多项式(1,-3,2);actSolution = p.solve();expSolution = [1 2];testCase.verifyEqual (actSolution expSolution)结束函数imaginarySolution(testCase) p =二次多项式(1,2,10);actSolution = p.solve();expSolution = [-1-3i -1+3i];testCase.verifyEqual (actSolution expSolution)结束结束结束

要运行测试并执行代码覆盖率分析,首先要使用插件创建一个测试运行器,该插件提供对文件中源代码的语句和函数覆盖率信息的编程访问QuadraticPolynomial.m

进口matlab.unittest.plugins.CodeCoveragePlugin进口matlab.unittest.plugins.codecoverage.CoverageResult跑步者= testrunner“textoutput”);format = CoverageResult;p = CodeCoveragePlugin.forFile(“QuadraticPolynomial.m”、生产=格式);addPlugin(选手,p)

创建测试套件QuadraticPolynomialTest1类并运行测试。测试通过。

testsuite = testsuite(“QuadraticPolynomialTest1”);运行(跑步、suite1);
运行quadratic多项式test1 ..Done quadratic多项式test1 __________

在测试运行之后,结果的属性CoverageResult对象保存覆盖结果。从覆盖结果中访问语句覆盖摘要。返回的向量表明测试执行了文件中17条语句中的8条,结果语句覆盖率为47%。语句覆盖率较低,这是因为测试没有执行抛出错误的代码,并且情节方法。

result1 = format.Result;statementSummary = coveragsummary (result1,“声明”
statementSummary =1×28日17

访问功能覆盖率摘要。摘要表明功能覆盖率为75%,因为测试遗漏了中的四个方法之一QuadraticPolynomial类(情节).

functionSummary = coveragsummary (result1,“功能”
functionSummary =1×23 4

现在,从覆盖率结果生成HTML代码覆盖率报告。该报告显示关于语句和函数覆盖率的信息,并使用不同的颜色突出显示已执行或遗漏的语句和函数。

generateHTMLReport (result1)编写此表达式

您可以与HTML代码覆盖率报告交互。例如,在总体覆盖范围方法中选择覆盖类型目前看列表查看有关该覆盖类型的详细信息。这张图显示了源细节部分用于语句覆盖,该部分显示覆盖或遗漏的所有语句。

运行其他测试以提高覆盖率

创建测试以执行源代码中未被执行的部分suite1.在当前文件夹中,创建另一个名为QuadraticPolynomialTest2.添加一个测试方法设置为针对非数字输入进行测试的类测试测试绘图多项式的属性的方法。

classdefquadraticpolynomial ialtest2 < matlab.unittest.TestCase方法(测试)函数nonnumericInput (testCase) testCase.verifyError (@ () QuadraticPolynomial (1,“3”2),...“QuadraticPolynomial: InputMustBeNumeric”结束函数plotPolynomial(testCase) p = QuadraticPolynomial(1,-3,2);图;testCase.addTeardown(@close,fig) ax = axes(fig);p.plot(ax) actYLabelText = ax. ylabel . string;expYLabelText =' 1.00 x ^ 2 - 3.00 - 2.00 x +”;testCase.verifyEqual (actYLabelText expYLabelText)结束结束结束

创建测试套件QuadraticPolynomialTest2类并运行测试。测试通过。

testsuite = testsuite(“QuadraticPolynomialTest2”);运行(跑步、suite2);
运行quadratic多项式test2。
.Done quadratic多项式test2 __________

在本例中,您运行了不同的测试套件来限定相同的源代码。为了报告这些测试运行的总聚合覆盖率,从与测试运行相对应的覆盖率结果的联合中生成一个HTML报告。报告显示,这两个测试套件结合在一起,完全执行了源代码中的语句和函数。

result2 = format.Result;generateHTMLReport(result1 + result2)

QuadraticPolynomial类定义

类的完整内容QuadraticPolynomial类。

classdefQuadraticPolynomial属性A, B, C% a*x^2 + b*x + c的系数结束方法函数obj =二次多项式(a,b,c)如果~ isa (,“数字”|| ~isa(b,“数字”|| ~isa(c,“数字”)错误(“QuadraticPolynomial: InputMustBeNumeric”...“系数必须是数字。”其他的obj。A = A;obj。B = B;obj.C = c;结束结束函数根= solve(obj)返回a*x^2 + b*x + c = 0的解delta = calculateDelta(obj);根(1)= (-obj.)B -√(delta)) / (2*obj.A);根(2)= (-obj.)B +√(delta)) / (2*obj.A);结束函数情节(obj, ax)沿对称轴画出a*x^2 + b*x + cdelta = calculateDelta(obj);x0 = -obj.B/(2*obj.A);x1 = abs(√(delta))/obj.A;X = x0 + linspace(-x1,x1);y = obj.A*x。^2 + obj。B*x + obj.C;情节(ax, x, y)包含(“x”) ylabel (sprintf (“% .2fx ^ 2% + .2fx % + .2f”, obj.B obj.A obj.C))结束结束方法(访问=私人)函数delta = calculateDelta(obj)B^2 - 4*obj.A*obj.C;结束结束结束

另请参阅

相关的话题

Baidu
map