matlab.unittest.plugins.DiagnosticsRecordingPlugin 类
用来记录测试结果的诊断信息的插件
描述
DiagnosticsRecordingPlugin
允许通过编程方式访问单元测试的诊断信息。
此类创建一个插件以记录测试结果的诊断信息。TestRunner
将这些诊断信息以 DiagnosticRecord
数组形式记录在 TestResult
对象的 Details
属性中。DiagnosticRecord
数组的每个元素对应于一个单独的测试事件。
如果您通过 runtests
函数、不带输入的 testrunner
函数或者 TestSuite
或 TestCase
的 run
方法运行测试,默认情况下测试框架将使用此插件。如果您通过 runperf
函数或者通过 TimeExperiment
的 run
方法运行性能测试,默认情况下测试框架也使用此插件。
构造
matlab.unittest.plugins.DiagnosticsRecordingPlugin
创建一个插件以记录测试结果的诊断信息。默认情况下,DiagnosticsRecordingPlugin
记录失败的验证和日志记录事件。
matlab.unittest.plugins.DiagnosticsRecordingPlugin(
创建一个插件,并通过一个或多个 Name,Value
)Name,Value
对组参数指定其他选项。Name
必须位于单引号 (''
) 内。您可采用任意顺序指定多个名称-值对组参数,例如 Name1,Value1,...,NameN,ValueN
。
输入参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: matlab.unittest.plugins.DiagnosticsRecordingPlugin('IncludingPassingDiagnostics',true)
创建一个插件,该插件除了记录关于验证失败和日志记录事件的诊断信息外,还记录通过测试的诊断信息。
IncludingPassingDiagnostics
— 表明是否记录通过测试的诊断信息的指示符
false
(默认) | true
是否记录通过测试的诊断信息,指定为 false
或 true
。默认情况下,插件不记录通过测试的诊断信息。
数据类型: logical
LoggingLevel
— 记录日志记录事件诊断信息的最高级别
1 (默认) | 0 | 2 | 3 | 4 | matlab.unittest.Verbosity
枚举
插件实例记录日志记录事件诊断信息的最高级别,指定为介于 0 和 4 之间的整数值或 matlab.unittest.Verbosity
枚举对象。该插件记录在此级别和更低级别记录的诊断信息。整数值对应于 matlab.unittest.Verbosity
枚举的成员。
默认情况下,插件记录在 matlab.unittest.Verbosity.Terse
级别(级别 1)记录的诊断信息。要排除所记录的诊断信息,请将 LoggingLevel
指定为 Verbosity.None
(级别 0)。
记录的诊断信息是您通过调用 log (TestCase)
或 log (Fixture)
方法提供给测试框架的诊断信息。
数值表示 | 枚举成员名称 | 详细程度描述 |
---|---|---|
0 | None | 无信息 |
1 | Terse | 最少的信息 |
2 | Concise | 适中信息量 |
3 | Detailed | 部分补充信息 |
4 | Verbose | 大量补充信息 |
OutputDetail
— 记录事件的详细信息级别
3 (默认) | 0 | 1 | 2 | 4 | matlab.unittest.Verbosity
枚举
记录事件的详细信息级别,指定为介于 0 和 4 之间的整数值或 matlab.unittest.Verbosity
枚举对象。整数值对应于 matlab.unittest.Verbosity
枚举的成员。
该插件使用 OutputDetail
指定的信息量来记录通过事件、失败事件和日志记录事件。默认情况下,该插件在 matlab.unittest.Verbosity.Detailed
级别(级别 3)记录事件。
数值表示 | 枚举成员名称 | 详细程度描述 |
---|---|---|
0 | None | 无信息 |
1 | Terse | 最少的信息 |
2 | Concise | 适中信息量 |
3 | Detailed | 部分补充信息 |
4 | Verbose | 大量补充信息 |
属性
IncludePassingDiagnostics
— 表明是否记录通过事件的诊断信息的指示符
false
(默认) | true
此 属性 为只读。
表明是否记录通过事件的诊断信息的指示符,返回为 false
或 true
。默认情况下,此属性为 false
。您可以在构造过程中将其指定为 true
。
数据类型: logical
LoggingLevel
— 记录诊断信息的最高详细级别
matlab.unittest.Verbosity
枚举对象
此 属性 为只读。
插件记录的日志记录诊断信息的最高详细级别,以 matlab.unittest.Verbosity
枚举对象形式返回。该插件记录在此级别和更低级别记录的诊断信息。默认情况下,此属性值为 matlab.unittest.Verbosity.Terse
。您可以在插件构造期间指定不同的日志记录级别。
记录的诊断信息是您通过调用 log (TestCase)
或 log (Fixture)
方法提供给测试框架的诊断信息。
OutputDetail
— 事件详细信息的显示级别
matlab.unittest.Verbosity
枚举对象
此 属性 为只读。
事件详细信息的显示级别,以 matlab.unittest.Verbosity
枚举对象形式返回。该插件使用 OutputDetail
指定的信息量来显示通过事件、失败事件和日志记录事件。默认情况下,此属性值为 matlab.unittest.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: 7.8912e-04 Details: [1×1 struct] Totals: 0 Passed, 1 Failed, 1 Incomplete. 0.00078912 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.unittest.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
记录的事件。
{testA_records.Event}'
ans = 3×1 cell array {'DiagnosticLogged' } {'VerificationFailed'} {'AssertionFailed' }
插件记录 Terse
详细级别的日志记录消息以及失败的验证和断言。
创建一个插件,用于记录所有详细级别的消息并包括通过事件的诊断信息。重新运行测试并收集 testA
的诊断记录。
runner = TestRunner.withNoPlugins; runner.addPlugin(DiagnosticsRecordingPlugin(... 'IncludingPassingDiagnostics',true,'OutputDetail',4,'LoggingLevel',4)); results = runner.run(suite); testA_records = results(1).Details.DiagnosticRecord;
查看插件为 testA
记录的事件。
{testA_records.Event}'
ans = 6×1 cell array {'DiagnosticLogged' } {'DiagnosticLogged' } {'VerificationPassed'} {'AssumptionPassed' } {'VerificationFailed'} {'AssertionFailed' }
该插件记录所有验证的诊断信息以及所有调用 log
方法获得的诊断信息。
选择所有具有失败事件诊断信息的记录。
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 values are equal using "isequaln". Actual Value: 5 Expected Value: 5 ------------------ Stack Information: ------------------ In C:\work\ExampleTest.m (ExampleTest.testA) at 6'
选择未完成事件的所有记录。
incompleteRecords = selectIncomplete(testA_records)
incompleteRecords = QualificationDiagnosticRecord with properties: Event: 'AssertionFailed' EventScope: TestMethod EventLocation: 'ExampleTest/testA' TestDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult] FrameworkDiagnosticResults: [1×1 matlab.unittest.diagnostics.DiagnosticResult] AdditionalDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult] Stack: [1×1 struct] Report: 'Assertion failed in ExampleTest/testA and it did not run to completion…'
由于此事件属于断言失败,框架还将此记录以带有失败诊断信息的 failedRecords(2)
形式返回。
选择具有日志记录事件的所有记录并显示日志记录的消息。
loggedRecords = selectLogged(testA_records); {loggedRecords.Report}'
ans = 2×1 cell array {'[Terse] Diagnostic logged (2018-04-12 13:15:23): Terse log message' } {'[Detailed] Diagnostic logged (2018-04-12 13:15:23): Detailed log message'}
版本历史记录
在 R2016a 中推出
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)