本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

print

类: matlab.unittest.plugins.OutputStream
包: matlab.unittest.plugins

将文本打印到输出流

语法

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

说明

print(stream,formatSpec,A1,...,An) 根据 formatSpec 格式化数组 A1,...,An 中的数据,并将结果发送到输出流 stream。使用您用于 sprintffprintf 的同一接口分配 formatSpecA1,...,An

输入参数

stream

输出流,指定为 OutputStream 类的实例

formatSpec

输出流中的文本的格式,指定为字符向量。有关构造 formatSpec 的信息,请参阅 fprintfsprint 参考页上的输入参数项。

A

数值数组或字符数组,指定为标量、向量、矩阵或多维数组。

示例

全部展开

在您的工作目录的文件中,在文件 ToFigure.m 中创建一个新的输出流类。该类允许插件输出重定向到图窗。

classdef ToFigure < matlab.unittest.plugins.OutputStream
    
    properties(SetAccess=private)
        Figure
    end
    properties(Access=private)
        ListBox
    end

此类使用两个属性。Figure 是接收并显示输出的图窗。ListBox 是显示文本的列表框的句柄。

在同一文件中,添加以下 methods 块。

    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 = [oldStr,newStr];
            fullStrCell = strsplit(fullStr,'\n','CollapseDelimiters',false);
            
            % Set the string and selection
            stream.ListBox.String = fullStrCell';
            stream.ListBox.Value = numel(fullStrCell);
            drawnow
        end
    end

您必须对 OutputStream 的任何子类实现 print 方法。在此示例中,该方法新建一个图窗(如果需要),格式化传入文本,然后将其添加到输出流中。

在同一文件中,添加以下 methods 块,其中包含用于创建该图窗的辅助函数。

    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

在您的工作文件夹的新文件中,创建一个包含以下测试类的 ExampleTest.m

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

testOne 中的 verifyEqual 验证导致测试失败。testOnetestTwo 中的验证包括 matlab.unittest.diagnostics.StringDiagnostic 实例。

在命令提示符下,基于 ExampleTest 类创建测试套件。

import matlab.unittest.TestSuite
import matlab.unittest.TestRunner
import matlab.unittest.plugins.DiagnosticsValidationPlugin

suite = TestSuite.fromClass(?ExampleTest);

创建一个将输出显示到命令行窗口中的测试运行程序。

runner = TestRunner.withTextOutput;

创建一个 DiagnosticsValidationPlugin,它显式指定应通过 ToFigure 输出流将其输出定向到图窗。

plugin = DiagnosticsValidationPlugin(ToFigure);

将该插接添加到 TestRunner 并运行套件。

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 double:
             5
    Expected double:
             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 中推出