Main Content

matlab.unittest.plugins.DiagnosticsRecordingPlugin 类

包: matlab.unittest.plugins

用来记录测试结果的诊断信息的插件

描述

matlab.unittest.plugins.DiagnosticsRecordingPlugin 类允许通过编程方式访问单元测试的诊断信息。

此类创建一个插件以记录测试结果的诊断信息。测试运行程序将这些诊断信息以 DiagnosticRecord 数组形式记录在 TestResult 对象的 Details 属性中。DiagnosticRecord 数组的每个元素对应于一个单独的测试事件。

如果您通过 runtests 函数、不带输入的 testrunner 函数或者 TestSuiteTestCaserun 方法运行测试,默认情况下测试框架将使用此插件。如果您通过 runperf 函数或者通过 TimeExperimentrun 方法运行性能测试,默认情况下测试框架也使用此插件。

构造

plugin = matlab.unittest.plugins.DiagnosticsRecordingPlugin 创建一个插件以记录测试结果的诊断信息。默认情况下,插件记录失败的验证和日志记录事件。

plugin = matlab.unittest.plugins.DiagnosticsRecordingPlugin(Name,Value) 使用一个或多个名称-值参数指定选项。例如,plugin = matlab.unittest.plugins.DiagnosticsRecordingPlugin("IncludingPassingDiagnostics",true) 创建一个插件,该插件除了记录关于验证失败和日志记录事件的诊断信息外,还记录通过测试的诊断信息。

输入参数

全部展开

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

示例: plugin = matlab.unittest.plugins.DiagnosticsRecordingPlugin(IncludingPassingDiagnostics=true)

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: plugin = matlab.unittest.plugins.DiagnosticsRecordingPlugin("IncludingPassingDiagnostics",true)

是否记录通过测试的诊断信息,指定为 falsetrue。默认情况下,插件不记录通过测试的诊断信息。

数据类型: logical

插件实例记录日志记录诊断信息的最高级别,指定为介于 0 和 4 之间的整数值或 matlab.automation.Verbosity 枚举对象。该插件记录在此级别和更低级别记录的诊断信息。整数值对应于 matlab.automation.Verbosity 枚举的成员。

默认情况下,插件记录在 matlab.automation.Verbosity.Terse 级别(级别 1)记录的诊断信息。要排除所记录的诊断信息,请将 LoggingLevel 指定为 Verbosity.None(级别 0)。

记录的诊断信息是您通过调用 log (TestCase)log (Fixture) 方法提供给测试框架的诊断信息。

数值表示枚举成员名称详细程度描述
0None

无信息

1Terse

最少的信息

2Concise

适中信息量

3Detailed

部分补充信息

4Verbose

大量补充信息

记录事件的详细信息级别,指定为介于 0 和 4 之间的整数值或 matlab.automation.Verbosity 枚举对象。整数值对应于 matlab.automation.Verbosity 枚举的成员。

该插件使用 OutputDetail 指定的信息量来记录通过事件、失败事件和日志记录事件。默认情况下,该插件在 matlab.automation.Verbosity.Detailed 级别(级别 3)记录事件。

数值表示枚举成员名称详细程度描述
0None

无信息

1Terse

最少的信息

2Concise

适中信息量

3Detailed

部分补充信息

4Verbose

大量补充信息

属性

全部展开

此 属性 为只读。

表明是否记录通过事件的诊断信息的指示符,返回为 falsetrue。默认情况下,此属性为 false。您可以在构造过程中将其指定为 true

数据类型: logical

此 属性 为只读。

插件记录的日志记录诊断信息的最高详细级别,以 matlab.automation.Verbosity 枚举对象形式返回。该插件记录在此级别和更低级别记录的诊断信息。默认情况下,此属性值为 matlab.automation.Verbosity.Terse。您可以在插件构造期间指定不同的日志记录级别。

记录的诊断信息是您通过调用 log (TestCase)log (Fixture) 方法提供给测试框架的诊断信息。

此 属性 为只读。

事件详细信息的显示级别,以 matlab.automation.Verbosity 枚举对象形式返回。该插件使用 OutputDetail 指定的信息量来显示通过事件、失败事件和日志记录事件。默认情况下,此属性值为 matlab.automation.Verbosity.Detailed。您可以在插件构造期间指定不同的输出详细信息。

复制语义

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

示例

全部折叠

在您的工作文件夹中,创建一个包含以下测试类的文件 ExampleTest.m。本测试旨在演示如何使用 DiagnosticsRecordingPlugin 类,并不是典型的单元测试。

classdef ExampleTest < matlab.unittest.TestCase  
    methods (Test)
        function testA(testCase)
            testCase.log(1,'Terse log message') 	% logs
            testCase.log(3,'Detailed log message') 	% logs
            testCase.verifyEqual(3+2,5)             % passes
            testCase.assumeTrue(true)               % passes
            testCase.verifyGreaterThan(5, 9)        % fails
            testCase.assertEqual(3.14,pi)           % fails/incomplete
        end
        function testB(testCase)
            % This test contains an intentional error - passing a character
            % instead of a variable to the ones function.
            a = [1 2];
            testCase.verifyEqual(ones('a'),[1 1]);  % errors
        end
    end
end

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

suite = testsuite('ExampleTest');

创建一个不含任何插件的测试运行器。此代码创建一个静默运行器并向您提供对安装的插件的完整控制权。向测试运行器添加一个 DiagnosticsRecordingPlugin 实例。

import matlab.unittest.TestRunner
import matlab.unittest.plugins.DiagnosticsRecordingPlugin

runner = TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin)

运行测试。

results = runner.run(suite);

显示第二个测试的结果。测试失败且未完成。

results(2)
ans = 

  TestResult with properties:

          Name: 'ExampleTest/testB'
        Passed: 0
        Failed: 1
    Incomplete: 1
      Duration: 0.0268
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed (rerun), 1 Incomplete.
   0.026778 seconds testing time.

为诊断记录进行索引以显示更多信息。测试引发未捕获的异常。

results(2).Details.DiagnosticRecord
ans = 

  ExceptionDiagnosticRecord with properties:

                          Event: 'ExceptionThrown'
                     EventScope: TestMethod
                  EventLocation: 'ExampleTest/testB'
                      Exception: [1×1 MException]
    AdditionalDiagnosticResults: [1×0 matlab.automation.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Error occurred in ExampleTest/testB and it did not run to completion...'

收集第一个测试 testA 的诊断记录。

testA_records = results(1).Details.DiagnosticRecord
testA_records = 

  1×3 heterogeneous DiagnosticRecord (LoggedDiagnosticRecord, QualificationDiagnosticRecord) array with properties:

    Event
    EventScope
    EventLocation
    Stack
    Report

查看插件为 testA 记录的事件。插件记录 Terse 详细级别的日志记录消息以及失败的验证和断言。

{testA_records.Event}'
ans =

  3×1 cell array

    {'DiagnosticLogged'  }
    {'VerificationFailed'}
    {'AssertionFailed'   }

创建一个插件,用于记录所有详细级别的消息并包括通过事件的诊断信息。重新运行测试并收集 testA 的诊断记录。

runner = TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin( ...
    'IncludingPassingDiagnostics',true,'OutputDetail',4,'LoggingLevel',4))
results = runner.run(suite);
testA_records = results(1).Details.DiagnosticRecord;

查看插件为 testA 记录的事件。该插件记录所有验证的诊断信息以及所有调用 log 方法获得的诊断信息。

{testA_records.Event}'
ans =

  6×1 cell array

    {'DiagnosticLogged'  }
    {'DiagnosticLogged'  }
    {'VerificationPassed'}
    {'AssumptionPassed'  }
    {'VerificationFailed'}
    {'AssertionFailed'   }

选择所有具有失败事件诊断信息的记录。

failedRecords = selectFailed(testA_records)
failedRecords = 

  1×2 QualificationDiagnosticRecord array with properties:

    Event
    EventScope
    EventLocation
    TestDiagnosticResults
    FrameworkDiagnosticResults
    AdditionalDiagnosticResults
    Stack
    Report

选择所有具有通过事件诊断信息的记录,并显示第一条记录的报告。

passedRecords = selectPassed(testA_records);
passedRecords(1).Report
ans =

    'Verification passed in ExampleTest/testA.
         ---------------------
         Framework Diagnostic:
         ---------------------
         verifyEqual passed.
         --> The numeric values are equal using "isequaln".
         
         Actual Value:
              5
         Expected Value:
              5
         ------------------
         Stack Information:
         ------------------
         In C:\work\ExampleTest.m (ExampleTest.testA) at 6'

选择未完成事件的所有记录。由于此事件属于断言失败,框架还将此记录以带有失败诊断信息的 failedRecords(2) 形式返回。

incompleteRecords = selectIncomplete(testA_records)
incompleteRecords = 

  QualificationDiagnosticRecord with properties:

                          Event: 'AssertionFailed'
                     EventScope: TestMethod
                  EventLocation: 'ExampleTest/testA'
          TestDiagnosticResults: [1×0 matlab.automation.diagnostics.DiagnosticResult]
     FrameworkDiagnosticResults: [1×1 matlab.automation.diagnostics.DiagnosticResult]
    AdditionalDiagnosticResults: [1×0 matlab.automation.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Assertion failed in ExampleTest/testA and it did not run to completion...'

选择具有日志记录事件的所有记录并显示日志记录的消息。

loggedRecords = selectLogged(testA_records);
{loggedRecords.Report}'
ans =

  2×1 cell array

    {'[Terse] Diagnostic logged (2022-10-15 19:10:56): Terse log message'      }
    {'[Detailed] Diagnostic logged (2022-10-15 19:10:56): Detailed log message'}

版本历史记录

在 R2016a 中推出