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

Пакет: matlab.unittest.plugins

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

Описание

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

Методы

печатьРаспечатайте текст к потоку вывода

Примеры

свернуть все

В файле в вашей рабочей директории создайте новый класс потока вывода в файле ToFigure.m. Этот класс позволяет сменному выводу быть перенаправленным фигуре.

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

Этот класс использует два свойства. Figure является фигурой, которая получает и отображает вывод. ListBox является указателем на поле списка, которое отображает текст.

В том же файле добавьте следующий блок methods.

    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 = [oldStr,newStr];
            fullStrCell = strsplit(fullStr,'\n','CollapseDelimiters',false);
            
            % Set the string and selection
            stream.ListBox.String = fullStrCell';
            stream.ListBox.Value = numel(fullStrCell);
            drawnow
        end
    end

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

В том же файле добавьте следующий блок methods, содержащий функцию помощника, чтобы создать фигуру.

    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

В новом файле в вашей рабочей папке создайте ExampleTest.m, содержащий следующий тестовый класс.

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

Проверка verifyEqual в testOne вызывает непройденный тест. Проверки в testOne и testTwo включают экземпляр matlab.unittest.diagnostics.StringDiagnostic.

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

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

suite = TestSuite.fromClass(?ExampleTest);

Создайте исполнителя тестов, который отображает вывод к командному окну.

runner = TestRunner.withTextOutput;

Создайте DiagnosticsValidationPlugin, который явным образом указывает, что его вывод должен перейти к фигуре через поток вывода ToFigure.

plugin = DiagnosticsValidationPlugin(ToFigure);

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

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 double:
             5
    Expected double:
             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