Класс: 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 для форматирования данных в виде строки или символьного вектора.
stream - Расположение, где плагин направляет вывод текстаOutputStream случайРасположение, в котором плагин направляет вывод текста, указанное как OutputStream экземпляр.
formatSpec - Формат выходных полейФормат выходных полей, заданный с помощью операторов форматирования. formatSpec также может включать обычный текст и специальные символы.
Если formatSpec включает литеральный текст, представляющий escape-символы, например, \n, то print переводит символы escape.
formatSpec может быть символьным вектором в одиночных кавычках или, начиная с R2016b, строковым скаляром.
Оператор форматирования
Оператор форматирования начинается со знака процента, %, и заканчивается символом преобразования. Требуется символ преобразования. При необходимости можно указать идентификатор, флаги, ширину поля, точность и операторы подтипа между % и символ преобразования. (Пробелы между операторами недопустимы и отображаются здесь только для удобства чтения).

Символ преобразования
В этой таблице показаны символы преобразования для форматирования числовых и символьных данных в виде текста.
| Тип значения | Преобразование | Подробнее |
|---|---|---|
Целое число, с подписью |
| База 10 |
Целое число, без знака |
| База 10 |
| Основание 8 (восьмеричное) | |
| База 16 (шестнадцатеричная), строчные буквы | |
| То же, что и | |
Число с плавающей запятой |
| Нотация с фиксированной точкой (используйте оператор точности, чтобы указать число цифр после десятичной точки). |
| Экспоненциальная нотация, например | |
| То же, что и | |
| Более компактный | |
| Более компактный | |
Символы или строки |
| Одиночный символ |
| Символьный вектор или строковый массив. Тип выходного текста совпадает с типом |
Дополнительные операторы
Опциональные операторы идентификатора, флагов, ширины поля, точности и подтипа дополнительно определяют формат выходного текста.
Идентификатор
Порядок обработки входных аргументов функции. Использовать синтаксис , где n$n представляет позиции других входных аргументов в вызове функции.
Пример:
('%3$s %2$s %1$s %2$s','A','B','C') печать входных аргументов 'A', 'B', 'C' следующим образом: C B A B.
Примечание.Если входной аргумент является массивом, нельзя использовать идентификаторы для указания конкретных элементов массива из этого входного аргумента.
Флаги
| Выравнивание слева. |
| Всегда печатайте знак (+ или -) для любого числового значения. |
| Вставьте пробел перед значением. |
| Установите для ширины поля нули перед значением. |
| Изменить выбранные числовые преобразования:
Пример:
|
Ширина поля
Минимальное количество печатаемых символов. Оператор ширины поля может быть числом или звездочкой (*) для ссылки на входной аргумент.
При указании * в качестве оператора ширины поля другие входные аргументы должны содержать как ширину, так и значение для печати. Ширина и значения могут быть парами аргументов или парами в числовом массиве. С * в качестве оператора ширины поля можно печатать различные значения с различной шириной.
Пример: Входные аргументы ('%12d',intmax) эквивалентны ('%*d',12,intmax).
Пример: Входные аргументы ('%*d',[2 10 5 100]) вернуть '10 100', с двумя помещениями, выделенными для 10 и пять пробелов для 100. В качестве альтернативы можно также указать ширину поля и значения в виде нескольких аргументов, как в ('%*d',2,10,5,100).
Если флажками не указано иное, то панель функций соответствует ширине поля с пробелами перед значением.
Точность
Для | Число цифр справа от десятичной запятой |
Для | Количество значащих цифр |
Оператор точности может быть числом или звездочкой (*) для ссылки на аргумент.
При указании * в качестве оператора точности поля другие входные аргументы должны обеспечивать и точность, и значение для печати. Уточнения и значения могут быть парами аргументов или парами в числовом массиве. С * в качестве оператора точности можно печатать различные значения в различных точностях.
При указании *.* в качестве операторов ширины поля и точности необходимо указать ширину поля, точность и значения в виде триплетов.
Пример: Входные аргументы ('%.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).
Примечание
Если указать оператор точности для значений с плавающей запятой, превышающих точность входного числового типа данных, результаты могут не соответствовать введенным значениям указанной точности. Результат зависит от оборудования компьютера и операционной системы.
Подтипы
Оператор подтипа можно использовать для печати значения с плавающей запятой в виде восьмеричного, десятичного или шестнадцатеричного значения. Оператор подтипа непосредственно предшествует символу преобразования. В этой таблице показаны преобразования, которые могут использовать подтипы.
Тип входного значения | Подтип и символ преобразования | Тип выходного значения |
|---|---|---|
Число с плавающей запятой |
| Шестнадцатеричное, восьмеричное или десятичное значение с двойной точностью |
| Шестнадцатеричное, восьмеричное или десятичное значение с одинарной точностью |
Текст до или после операторов форматирования
formatSpec может также включать дополнительный текст перед знаком процента, %или после символа преобразования. Текст может быть следующим:
Обычный текст для печати.
Специальные символы, которые нельзя вводить как обычный текст. В этой таблице показано, как представлять специальные символы в formatSpec.
Специальный символ | Представление |
|---|---|
Одинарная кавычка |
|
Процент символа |
|
Обратная косая черта |
|
Тревога |
|
Клавиша Backspace |
|
Веб-канал формы |
|
Новая линия |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, числовое значение Юникода ® которого может быть представлено шестнадцатеричным числом , |
Пример:
|
Символ, числовое значение Юникода которого может быть представлено восьмеричным числом, |
Пример:
|
Заметное поведение преобразований с операторами форматирования
Числовые преобразования печатают только действительную составляющую комплексных чисел.
Если указано преобразование, которое не соответствует данным, например преобразование текста для числового значения, MATLAB ® переопределяет указанное преобразование и использует%e.
Пример:
'%s' новообращенные pi кому 3.141593e+00.
При применении преобразования текста (либо %c или %s) в целочисленные значения, MATLAB преобразует значения, соответствующие допустимым кодам символов, в символы.
Пример:
'%s' новообращенные [65 66 67] кому ABC.
A1,...,An - Данные для отображенияОтображаемые данные, указанные как числовые, символьные или строковые массивы.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string
В файле текущей папки создайте класс с именем 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 отображает диагностическую информацию независимо от того, сталкиваются ли тесты с условиями отказа.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.