exponenta event banner

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

Пакет: matlab.unittest.plugins

Интерфейс, определяющий, куда отправлять вывод текста

Описание

OutputStream interface - абстрактный класс интерфейса, который можно использовать в качестве базового класса, чтобы указать, куда плагины направляют свой текстовый вывод. Чтобы создать пользовательский выходной поток, реализуйте print способ, который правильно обрабатывает форматированную текстовую информацию, передаваемую ему платформой тестирования. Многие текстовые плагины принимают OutputStream для перенаправления текста, который они создают, конфигурируемым образом.

matlab.unittest.plugins.OutputStream класс является handle класс.

Методы

развернуть все

Примеры

свернуть все

В файле текущей папки создайте класс с именем ToFigure который перенаправляет вывод плагина на фигуру и отображает его в списке в пределах фигуры. Определите Figure и ListBox свойства для представления фигуры и маркера перемещения в поле списка соответственно.

classdef ToFigure < matlab.unittest.plugins.OutputStream
    
    properties(SetAccess = private)
        Figure
    end
    properties(Access = private)
        ListBox
    end

Необходимо внедрить print метод для любого подкласса OutputStream. В этом примере метод создает новый рисунок (при необходимости), форматирует входящий текст, а затем добавляет его в выходной поток.

    methods
        function print(stream,formatSpec,varargin)
            % Create the figure
            if isempty(stream.Figure) || ~ishghandle(stream.Figure)
                stream.createFigure
            end
            newStr = sprintf(formatSpec,varargin{:});
            oldStr = strjoin(stream.ListBox.String','\n');
            
            % Create the full message
            fullStr = strjoin([oldStr,newStr]);
            fullStrArray = strsplit(fullStr,'\n','CollapseDelimiters',false);
            
            % Set the string and selection
            stream.ListBox.String = fullStrArray';
            stream.ListBox.Value = numel(fullStrArray);
            drawnow
        end
    end

В methods блок с private access, реализация вспомогательного метода с именем createFigure создает рисунок и список, используемый плагином.

    methods(Access = private)
        function createFigure(stream)
            stream.Figure = figure(...
                'Name',         'Unit Test Output',...
                'WindowStyle',  'docked');
            
            stream.ListBox = uicontrol(...
                'Parent',       stream.Figure,...
                'Style',        'listbox',...
                'String',       {},...
                'Units',        'normalized',...
                'Position',     [.05 .05 .9 .9],...
                'Max',          2, ...
                'FontName',     'Monospaced',...
                'FontSize',     13);
        end
    end
end

Сохранить ToFigure класс. Теперь в текущей папке создайте файл с именем ExampleTest.m содержит следующий класс теста. verifyEqual квалификация в testOne вызывает сбой теста. Проверка в testTwo проходит. Тест, соответствующий testThree проходит без формирования выходного сигнала.

classdef ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testOne(testCase)  % Test fails
            testCase.verifyEqual(5,4,'Testing 5==4');
        end
        function testTwo(testCase)  % Test passes
            testCase.verifyEqual(5,5,'Testing 5==5');
        end
        function testThree(testCase)
            % test code
        end
    end
end

В командной строке создайте набор тестов из ExampleTest класс.

import matlab.unittest.TestRunner
import matlab.unittest.plugins.DiagnosticsValidationPlugin

suite = testsuite('ExampleTest');

Создайте тестовый питатель, отображающий выходные данные в окне команд.

runner = TestRunner.withTextOutput;

Создать DiagnosticsValidationPlugin экземпляр, который явно указывает, что его вывод должен перейти к фигуре с помощью ToFigure выходной поток.

plugin = DiagnosticsValidationPlugin(ToFigure);

Добавьте подключаемый модуль к питателю и запустите тесты.

runner.addPlugin(plugin)
result = runner.run(suite);
Running ExampleTest

================================================================================
Verification failed in ExampleTest/testOne.

    ----------------
    Test Diagnostic:
    ----------------
    Testing 5==4

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> The values are not equal using "isequaln".
    --> Failure table:
                Actual    Expected    Error    RelativeError
                ______    ________    _____    _____________
            
                5         4           1        0.25         
    
    Actual Value:
             5
    Expected Value:
             4

    ------------------
    Stack Information:
    ------------------
    In C:\work\ExampleTest.m (ExampleTest.testOne) at 4
================================================================================
...
Done ExampleTest
__________

Failure Summary:

     Name                 Failed  Incomplete  Reason(s)
    ==================================================================
     ExampleTest/testOne    X                 Failed by verification.

Вывод на экран осуществляется только при тестовых сбоях. По умолчанию TestRunner.withTextOutput использует DiagnosticsOutputPlugin для отображения выходных данных на экране.

В дополнение к текстовым выводам по умолчанию, отображаемым на экране, DiagnosticsValidationPlugin вывод направлен на закрепленную фигуру. На рисунке показан этот текст.

------------------------------
Validation of Test Diagnostic:
------------------------------
Testing 5==4
------------------------------
Validation of Test Diagnostic:
------------------------------
Testing 5==5

DiagnosticsValidationPlugin отображает диагностическую информацию независимо от того, сталкиваются ли тесты с условиями отказа.

Представлен в R2014a