exponenta event banner

печать

Класс: matlab.unittest.plugins.OutputStream
Пакет: matlab.unittest.plugins

Запись текста, созданного TestRunnerPlugin экземпляр в выходной поток

Синтаксис

print(stream,formatSpec,A1,...,An)

Описание

print(stream,formatSpec,A1,...,An) использует операторы форматирования formatSpec для форматирования данных, matlab.unittest.plugins.TestRunnerPlugin экземпляр генерируется в массивах A1,...,An. Затем метод записывает результат в выходные данные. stream.

Для данных, которые не генерируются TestRunnerPlugin экземпляр, использование fprintf для записи данных в текстовый файл или экран или используйте sprintf для форматирования данных в виде строки или символьного вектора.

Входные аргументы

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

Расположение, в котором плагин направляет вывод текста, указанное как OutputStream экземпляр.

Формат выходных полей, заданный с помощью операторов форматирования. formatSpec также может включать обычный текст и специальные символы.

Если formatSpec включает литеральный текст, представляющий escape-символы, например, \n, то print переводит символы escape.

formatSpec может быть символьным вектором в одиночных кавычках или, начиная с R2016b, строковым скаляром.

Оператор форматирования

Оператор форматирования начинается со знака процента, %, и заканчивается символом преобразования. Требуется символ преобразования. При необходимости можно указать идентификатор, флаги, ширину поля, точность и операторы подтипа между % и символ преобразования. (Пробелы между операторами недопустимы и отображаются здесь только для удобства чтения).

Символ преобразования

В этой таблице показаны символы преобразования для форматирования числовых и символьных данных в виде текста.

Тип значенияПреобразованиеПодробнее

Целое число, с подписью

%d или %i

База 10

Целое число, без знака

%u

База 10

%o

Основание 8 (восьмеричное)

%x

База 16 (шестнадцатеричная), строчные буквы af

%X

То же, что и %x, прописные буквы AF

Число с плавающей запятой

%f

Нотация с фиксированной точкой (используйте оператор точности, чтобы указать число цифр после десятичной точки).

%e

Экспоненциальная нотация, например 3.141593e+00 (Используйте оператор точности, чтобы указать число цифр после десятичной запятой.)

%E

То же, что и %e, но в верхнем регистре, например, 3.141593E+00 (Используйте оператор точности, чтобы указать число цифр после десятичной запятой.)

%g

Более компактный %e или %f, без конечных нулей (используйте оператор точности для указания количества значащих цифр.)

%G

Более компактный %E или %f, без конечных нулей (используйте оператор точности для указания количества значащих цифр.)

Символы или строки

%c

Одиночный символ

%s

Символьный вектор или строковый массив. Тип выходного текста совпадает с типом formatSpec.

Дополнительные операторы

Опциональные операторы идентификатора, флагов, ширины поля, точности и подтипа дополнительно определяют формат выходного текста.

  • Идентификатор

    Порядок обработки входных аргументов функции. Использовать синтаксис n$, где n представляет позиции других входных аргументов в вызове функции.

    Пример: ('%3$s %2$s %1$s %2$s','A','B','C') печать входных аргументов 'A', 'B', 'C' следующим образом: C B A B.

    Примечание.Если входной аргумент является массивом, нельзя использовать идентификаторы для указания конкретных элементов массива из этого входного аргумента.

  • Флаги

    '–'

    Выравнивание слева.
    Пример: %-5.2f
    Пример: %-10s

    '+'

    Всегда печатайте знак (+ или -) для любого числового значения.
    Пример: %+5.2f
    Текст с выравниванием вправо.
    Пример: %+10s

    ' '

    Вставьте пробел перед значением.
    Пример: % 5.2f

    '0'

    Установите для ширины поля нули перед значением.
    Пример: %05.2f

    '#'

    Изменить выбранные числовые преобразования:

    • Для %o, %x, или %XПечать 0, 0x, или 0X префикс.

    • Для %f, %e, или %E, печатать десятичную точку, даже если точность равна 0.

    • Для %g или %G, не удаляйте конечные нули или десятичную точку.

    Пример: %#5.0f

  • Ширина поля

    Минимальное количество печатаемых символов. Оператор ширины поля может быть числом или звездочкой (*) для ссылки на входной аргумент.

    При указании * в качестве оператора ширины поля другие входные аргументы должны содержать как ширину, так и значение для печати. Ширина и значения могут быть парами аргументов или парами в числовом массиве. С * в качестве оператора ширины поля можно печатать различные значения с различной шириной.

    Пример: Входные аргументы ('%12d',intmax) эквивалентны ('%*d',12,intmax).

    Пример: Входные аргументы ('%*d',[2 10 5 100]) вернуть '10 100', с двумя помещениями, выделенными для 10 и пять пробелов для 100. В качестве альтернативы можно также указать ширину поля и значения в виде нескольких аргументов, как в ('%*d',2,10,5,100).

    Если флажками не указано иное, то панель функций соответствует ширине поля с пробелами перед значением.

  • Точность

    Для %f, %e, или %E

    Число цифр справа от десятичной запятой
    Пример: '%.4f' отпечатки pi как '3.1416'

    Для %g или %G

    Количество значащих цифр
    Пример: '%.4g' отпечатки pi как '3.142'

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

    При указании * в качестве оператора точности поля другие входные аргументы должны обеспечивать и точность, и значение для печати. Уточнения и значения могут быть парами аргументов или парами в числовом массиве. С * в качестве оператора точности можно печатать различные значения в различных точностях.

    При указании *.* в качестве операторов ширины поля и точности необходимо указать ширину поля, точность и значения в виде триплетов.

    Пример: Входные аргументы ('%.4f',pi) эквивалентны ('%.*f',4,pi).

    Пример: Входные аргументы ('%6.4f',pi) эквивалентны ('%.*f',6,4,pi).

    Пример: Входные аргументы ('%*.*f',6,4,pi,9,6,exp(1)) вернуть '3.1416 2.718282', с 9 и 6 как ширина поля и точность для вывода exp(1).

    Примечание

    Если указать оператор точности для значений с плавающей запятой, превышающих точность входного числового типа данных, результаты могут не соответствовать введенным значениям указанной точности. Результат зависит от оборудования компьютера и операционной системы.

  • Подтипы

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

    Тип входного значения

    Подтип и символ преобразования

    Тип выходного значения

    Число с плавающей запятой

    %bx или %bX
    %bo
    %bu

    Шестнадцатеричное, восьмеричное или десятичное значение с двойной точностью
    Пример: %bx отпечатки pi как 400921fb54442d18

    %tx или %tX
    %to
    %tu

    Шестнадцатеричное, восьмеричное или десятичное значение с одинарной точностью
    Пример: %tx отпечатки pi как 40490fdb

Текст до или после операторов форматирования

formatSpec может также включать дополнительный текст перед знаком процента, %или после символа преобразования. Текст может быть следующим:

  • Обычный текст для печати.

  • Специальные символы, которые нельзя вводить как обычный текст. В этой таблице показано, как представлять специальные символы в formatSpec.

    Специальный символ

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

    Одинарная кавычка

    ''

    Процент символа

    %%

    Обратная косая черта

    \\

    Тревога

    \a

    Клавиша Backspace

    \b

    Веб-канал формы

    \f

    Новая линия

    \n

    Возврат каретки

    \r

    Горизонтальная вкладка

    \t

    Вертикальная вкладка

    \v

    Символ, числовое значение Юникода ® которого может быть представлено шестнадцатеричным числом ,N

    \xN

    Пример: sprintf('\x5A') прибыль 'Z'

    Символ, числовое значение Юникода которого может быть представлено восьмеричным числом, N

    \N

    Пример: sprintf('\132') прибыль 'Z'

Заметное поведение преобразований с операторами форматирования

  • Числовые преобразования печатают только действительную составляющую комплексных чисел.

  • Если указано преобразование, которое не соответствует данным, например преобразование текста для числового значения, MATLAB ® переопределяет указанное преобразование и использует%e.

    Пример: '%s' новообращенные pi кому 3.141593e+00.

  • При применении преобразования текста (либо %c или %s) в целочисленные значения, MATLAB преобразует значения, соответствующие допустимым кодам символов, в символы.

    Пример: '%s' новообращенные [65 66 67] кому ABC.

Отображаемые данные, указанные как числовые, символьные или строковые массивы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Признаки

Abstracttrue

Сведения об атрибутах методов см. в разделе Атрибуты метода.

Примеры

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

В файле текущей папки создайте класс с именем 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