Класс: 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
включает буквенные тексты, представляющие побочные символы, такие как \n
, затем print
преобразует символы побега.
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 |
|
Подача формы |
|
Новая линия |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, чей Юникод® числовое значение может быть представлено шестнадцатеричным числом, |
Пример:
sprintf('\x5A') |
Символ, числовое значение в Юникоде которого может быть представлено восьмеричным числом |
Пример:
sprintf('\132') |
Заметное поведение преобразований с операторами форматирования
Числовые преобразования печатают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, такое как преобразование текста для числового значения, 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
доступ, реализуйте вспомогательный метод с именем 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
отображает диагностическую информацию независимо от того, сталкиваются ли тесты с условиями отказа.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.