matlab.unittest.plugins.OutputStream class

Пакет: matlab.unittest.plugins

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

Описание

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

The 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 доступ, реализуйте вспомогательный метод с именем 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 содержащий следующий тестовый класс. The verifyEqual проверка в testOne приводит к непройденному тесту. The верификации in 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

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

Введенный в R2014a