exponenta event banner

matlab.unittest.plugins.CodecoCovereyPlugin класс

Пакет: matlab.unittest.plugins

Подключаемый модуль, который создает отчет о покрытии кода

Описание

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

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

Строительство

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

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

Методы

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

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

Ручка. Сведения о том, как классы обработки влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

В новом файле 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 пакет (a +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

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