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

matlab.unittest.plugins.OutputStream 类

包: matlab.unittest.plugins

决定文本输出发送位置的接口

说明

OutputStream 接口是一个抽象接口类,您可以将其用作基类来指定插件将其文本输出定向到何处。要创建自定义输出流,请实现一种 print 方法,以便正确处理测试框架向其传递的格式化文本信息。许多面向文本的插件都接受 OutputStream,以便以可配置方式重定向其生成的文本。

方法

print将文本打印到输出流

复制语义

句柄。要了解句柄类如何影响复制操作,请参阅复制对象

示例

全部折叠

在您的工作目录的文件中,在文件 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 中推出