matlab.unittest.plugins.CodeCoveragePlugin class

Пакет: matlab.unittest.plugins

Плагин, который создает отчет о покрытии кода

Описание

Для создания отчета о покрытии линии для MATLAB® исходный код, добавьте CodeCoveragePlugin на TestRunner. Среда тестирования запускает тесты, и полученный отчет о покрытии указывает на выполненные строки кода. Отчет о покрытии основан на исходном коде, расположенном в одной или нескольких папках или пакетах. Исходный код должен находиться в пути MATLAB и оставаться в пути во время тестового запуска.

The CodeCoveragePlugin использует профилировщик MATLAB, чтобы определить, какие строки кода выполняются тестами. Тесты и исходный код не должны взаимодействовать с профилировщиком. Перед запуском набора тестов плагин очищает все данные, собранные профилировщиком.

Конструкция

Создание экземпляров CodeCoveragePlugin использование одного из его статических методов.

Чтобы сообщить об исходном коде в одном или нескольких файлах, используйте forFile статический метод. Чтобы сообщить об исходном коде в одной или нескольких папках, используйте forFolder статический метод. Чтобы сообщить об исходном коде в одном или нескольких пакетах, используйте forPackage статический метод.

Методы

forFileКонструкция CodeCoveragePlugin для файлов
forFolderКонструкция CodeCoveragePlugin для папок
forPackageКонструкция CodeCoveragePlugin для пакетов

Копировать семантику

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

В новом файле quadraticSolver.mв рабочей папке создайте следующую функцию.

function roots = quadraticSolver(a,b,c)
% quadraticSolver returns solutions to the
% quadratic equation a*x^2 + b*x + c = 0.

checkInputs

roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a);

    function checkInputs
        if ~isa(a,'numeric') || ~isa(b,'numeric') || ~isa(c,'numeric')
            error('quadraticSolver:InputMustBeNumeric', ...
                'Coefficients must be numeric.')
        end
    end
end

Создайте тест для квадратичного решателя. В tests пакет (а +tests подпапка), создание SolverTest.m содержащий следующий тестовый класс.

classdef SolverTest < matlab.unittest.TestCase
    % SolverTest tests solutions to the quadratic equation
    % a*x^2 + b*x + c = 0
    
    methods (Test)
        function testRealSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2,1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function testImaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i, -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
    end
    
end

В командной строке из исходной рабочей папки создайте тестовый набор из tests пакет.

import matlab.unittest.TestSuite
import matlab.unittest.TestRunner
import matlab.unittest.plugins.CodeCoveragePlugin

suite = TestSuite.fromPackage('tests');

Создайте исполнителя тестов.

runner = TestRunner.withTextOutput;

Добавить CodeCoveragePlugin и запустите тесты. Укажите, что папка исходного кода является текущей рабочей папкой. Если в текущей рабочей папке есть другие файлы исходного кода, они отображаются в отчете о покрытии. Папка, содержащая исходный код (quadraticSolver.m) должен находиться в пути поиска файлов MATLAB.

runner.addPlugin(CodeCoveragePlugin.forFolder(pwd))
result = runner.run(suite);
Running tests.SolverTest
..
Done tests.SolverTest
__________

MATLAB создает отчет о покрытии кода для функции квадратичного решателя во временной папке.

Code coverage report for quadraticSolver

The checkinputs вложенная функция не имеет полного покрытия кода. С момента испытаний в SolverTest.m не передавать нечисловой вход в quadraticSolverMATLAB не выполняет код, который выдает ошибку, если входы не числовые. Чтобы решить проблему недостающего покрытия, добавьте метод тестирования для проверки условия ошибки.

В рабочей папке создайте файл quadraticSolver.m с помощью следующей функции.

function roots = quadraticSolver(a,b,c)
    % quadraticSolver returns solutions to the
    % quadratic equation a*x^2 + b*x + c = 0.
    checkInputs
    roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
    roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a);
    
    function checkInputs
        if ~isa(a,'numeric') || ~isa(b,'numeric') || ~isa(c,'numeric')
            error('quadraticSolver:InputMustBeNumeric', ...
                'Coefficients must be numeric.')
        end
    end
end

Создайте класс тестирования для квадратичного решателя в ForFileSolverTest.m.

classdef ForFileSolverTest < matlab.unittest.TestCase
    % SolverTest tests solutions to the quadratic equation
    % a*x^2 + b*x + c = 0
    
    methods (Test)
        function testRealSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2,1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function testImaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i, -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
    end
end

В командной строке создайте тестовый набор для ForFileSolverTest.m, и создайте исполнителя тестов.

import matlab.unittest.TestRunner

testFile = 'ForFileSolverTest.m';
suite = testsuite(testFile);
runner = TestRunner.withTextOutput;

Создайте плагин, который выводит отчет о покрытии кода для исходного кода в формате Cobertura.

import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoberturaFormat

sourceCodeFile = 'quadraticSolver.m';
reportFile = 'CoverageResults.xml';
reportFormat = CoberturaFormat(reportFile);
plugin = CodeCoveragePlugin.forFile(sourceCodeFile,'Producing',reportFormat);

Добавьте плагин к исполнителю тестов и запустите тесты.

runner.addPlugin(plugin);
result = runner.run(suite);
Running ForFileSolverTest
..
Done ForFileSolverTest
__________

Отображение содержимого файла с результатами покрытия кода.

disp(fileread(reportFile))
<?xml version="1.0" encoding="utf-8"?>
<coverage branch-rate="NaN" branches-covered="NaN" branches-valid="NaN" complexity="NaN" line-rate="0.8" lines-covered="4" lines-valid="5" timestamp="737000.4343" version="NaN">
   <sources>
      <source>C:\work\</source>
   </sources>
   <packages>
      <package branch-rate="NaN" complexity="NaN" line-rate="0.8" name="">
         <classes>
            <class branch-rate="NaN" complexity="NaN" filename="quadraticSolver.m" line-rate="0.8" name="quadraticSolver">
               <methods/>
               <lines>
                  <line branch="NaN" condition-coverage="NaN" hits="2" number="4"/>
                  <line branch="NaN" condition-coverage="NaN" hits="2" number="5"/>
                  <line branch="NaN" condition-coverage="NaN" hits="2" number="6"/>
                  <line branch="NaN" condition-coverage="NaN" hits="2" number="9"/>
                  <line branch="NaN" condition-coverage="NaN" hits="0" number="10"/>
               </lines>
            </class>
         </classes>
      </package>
   </packages>
</coverage>
Введенный в R2014b