类: matlab.unittest.plugins.OutputStream
包: matlab.unittest.plugins
将 TestRunnerPlugin
实例生成的文本写入输出流
说明
输入参数
stream
— 插件要将文本输出定向到的位置
OutputStream
实例
插件定向文本输出的位置,指定为 OutputStream
实例。
formatSpec
— 输出字段的格式
格式化操作符
输出字段的格式,使用格式化操作符指定。formatSpec
还可以包括普通文本和特殊字符。
如果 formatSpec
包括表示转义字符的字面文本,如 \n
,则 print
将转换转义字符。
formatSpec
可以是用单引号引起来的字符向量,也可以是字符串标量。
格式化操作符
格式化操作符以百分号 %
开头,以转换字符结尾。转换字符是必需的。您也可以在 %
和转换字符之间指定标识符、标志、字段宽度、精度和子类型操作符。(操作符之间的空格无效,在这里显示空格只是为了便于阅读。)
转换字符
此表显示了要将数值和字符数据格式化为文本的转换字符。
值类型 | 转换 | 详细信息 |
---|---|---|
有符号整数 |
| 以 10 为基数 |
无符号整数 |
| 以 10 为基数 |
| 以 8 为基数(八进制) | |
| 以 16 为基数(十六进制),小写字母 | |
| 与 | |
浮点数 |
| 定点记数法(使用精度操作符指定小数点后的位数。) |
| 指数记数法,例如 | |
| 与 | |
| 更紧凑的 | |
| 更紧凑的 | |
字符或字符串 |
| 单个字符 |
| 字符向量或字符串数组。输出文本的类型与 |
可选运算符
可选标识符、标志、字段宽度、精度和子类型操作符进一步定义了输出文本的格式。
标识符
处理函数输入参数的顺序。使用语法
,其中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
,即使精度为零也将输出小数点。对于
%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
退格符
\b
换页符
\f
换行符
\n
回车符
\r
水平制表符
\t
垂直制表符
\v
其 Unicode® 数值可以通过十六进制数
N
表示的字符\xN
示例:
返回print
('\x5A')'Z'
其 Unicode 数值可以通过八进制数
N
表示的字符\N
示例:
返回print
('\132')'Z'
使用格式化操作符进行转换时要注意的行为
数值转换仅输出复数的实部。
如果指定不适合数据的转换(例如数值的文本转换),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
您必须对 OutputStream
的任何子类实现 print
方法。在此示例中,该方法新建一个图窗(如果需要),格式化传入文本,然后将其添加到输出流中。
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
在具有 private
访问权限的 methods
代码块中,实现名为 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
的文件,其中包含以下测试类。testOne
中的 verifyEqual
验证导致测试失败。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 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)