这个例子展示了如何创建一个插件来添加数据TestResult
对象。该插件将断言中的实际和预期值附加细节
财产的财产TestResult
目的。延长TestRunner
,插件覆盖选择方法matlab.unittest.plugins.TestRunnerPlugin
类。
在当前文件夹中的文件中,创建自定义插件类DetailsRecordingPlugin
,继承自TestRunnerPlugin
类。的完整代码DetailsRecordingPlugin
,请参阅DetailsRecordingPlugin类定义摘要.
将实际值和期望值存储在TestResult
对象,定义两个常量属性,ActField
和ExpField
,在一个特性
堵塞。设置价值ActField
到该领域的名称细节
包含实际值的结构。设置价值ExpField
更改为包含期望值的字段的名称。
特性(Constant,Access = private) ActField = '实际值';ExpField =“ExpectedValue”;结束
将新字段添加到细节
所有的属性TestResult
对象属于测试会话,重写逃亡者
的方法TestRunnerPlugin
在一个方法
块受保护的
访问。逃亡者
为此添加两个空字段细节
结构的结构TestResult
对象并调用超类方法来触发整个测试运行。
方法(访问=受保护)功能runsession(plugin,plugindata)结果etails = plugindata.resultdetails;结果etails.append(plugin.actfield,{})结果etails.append(plugin.exp菲尔德,{})runsession@matlab.unittest.plugins.testrunnerplugin(plugin,plugindata);结束结束
要添加字段,实现逃亡者
包含对此的呼叫附加
的方法matlab.unittest.plugins.plugindata.ResultDetails
类。每个调用将空字段添加到细节
结构。
添加听众断言
和AssertionFailed
通过扩展测试框架使用的方法来创建测试内容。测试内容包括TestCase
每一个实例测试
元素,类级TestCase
实例的testclasssetup.
和TestClassTeardown
方法块,和夹具
使用的实例TestCase
类的SharedTestFixtures
属性。
在覆盖创建方法时调用相应的超类方法。您添加到返回的听众夹具
要么TestCase
实例原因reactToAssertion
帮助方法在执行断言时执行。要将断言数据添加到测试结果,请将结果修饰符实例和断言事件侦听器数据传递给帮助器方法。
将这些创建方法添加到方法
块受保护的
访问。
方法(访问=受保护)功能= createSharedTestFixture(plugin, pluginData...matlab.unittest.plugins.testrunnerplugin(插件,plugindata);结果etails = plugindata.resultdetails;fixture.addlistener('断言',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));fixture.addlistener('assettionfailed',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));结束功能testcase = createTestClassInstance(插件,plugindata)testcase = createTestClassInstance @...matlab.unittest.plugins.testrunnerplugin(插件,plugindata);结果etails = plugindata.resultdetails;testcase.addlistener('断言',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));testcase.addlistener('assettionfailed',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));结束功能testCase = createTestMethodInstance(plugin,pluginData)...matlab.unittest.plugins.testrunnerplugin(插件,plugindata);结果etails = plugindata.resultdetails;testcase.addlistener('断言',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));testcase.addlistener('assettionfailed',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));结束结束
在一个方法
块私人
访问,定义帮助器方法reactToAssertion
.该方法使用QualificationEventData
实例来提取断言中的实际值和期望值IsEqualTo
约束,将提取的值转换为单元阵列,并将小区数组附加到相应的字段TestResult
目的。
方法(访问=私人)功能reactToAssertion(插件,evd resultDetails)如果〜isa(evd.constraint,“matlab.unittest.constraints.IsEqualTo”)返回结束resultDetails.append (plugin.ActField {evd.ActualValue}) resultDetails.append (plugin.ExpField, {evd.Constraint.Expected})结束结束
该代码提供了DetailsRecordingPlugin
.
classdef详细信息recordingplugin特性(Constant, Access = private“ActualValue”;ExpField ='期望值';结束方法(访问=受保护)功能runsession(plugin,plugindata)结果etails = plugindata.resultdetails;结果etails.append(plugin.actfield,{})结果etails.append(plugin.exp菲尔德,{})runsession@matlab.unittest.plugins.testrunnerplugin(plugin,plugindata);结束功能= createSharedTestFixture(plugin, pluginData...matlab.unittest.plugins.testrunnerplugin(插件,plugindata);结果etails = plugindata.resultdetails;fixture.addlistener('断言',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));fixture.addlistener('assettionfailed',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));结束功能testcase = createTestClassInstance(插件,plugindata)testcase = createTestClassInstance @...matlab.unittest.plugins.testrunnerplugin(插件,plugindata);结果etails = plugindata.resultdetails;testcase.addlistener('断言',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));testcase.addlistener('assettionfailed',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));结束功能testCase = createTestMethodInstance(plugin,pluginData)...matlab.unittest.plugins.testrunnerplugin(插件,plugindata);结果etails = plugindata.resultdetails;testcase.addlistener('断言',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));testcase.addlistener('assettionfailed',...@(〜,evd)plugin.reacttoassertion(EVD,结果销));结束结束方法(访问=私人)功能reactToAssertion(插件,evd resultDetails)如果〜isa(evd.constraint,“matlab.unittest.constraints.IsEqualTo”)返回结束resultDetails.append (plugin.ActField {evd.ActualValue}) resultDetails.append (plugin.ExpField, {evd.Constraint.Expected})结束结束结束
在当前文件夹中,创建一个名为ExampleTest.m
包含以下参数化测试类。该类导致具有25个元件的测试套件,每个元素对应于使用不同种子的用于随机数发生器进行的实验。在每个实验中,测试框架创建一个100-100乘以通常分布的随机数的向量,并断言实际和预期样本装置之间的差异的大小在0.1内。
classdefExampleTest < matlab.unittest.TestCase特性Samplesize = 100;结束特性(TestParameter)Seed = Num2Cell(Randi(10 ^ 6,1,25));结束方法(测试)功能testMean (testCase,种子)导入matlab.unittest.constraints.IsEqualTo进口matlab.unittest.constraints.absolutetolerance.rng(种子)testCase.assertThat(意思是(randn (testCase.SampleSize)),...isequalto(0,'之内'AbsoluteTolerance (0.1)));结束结束结束
在命令提示符下,从中创建一个测试套件excepletest.
类。
进口matlab.unittest.TestSuite进口matlab.unittest.testrunner.套房= testsuite.fromclass(?exampletest);
创建一个TestRunner
实例没有插件。这段代码创建了一个静默运行器,并让您控制已安装的插件。
跑步者= TestRunner.withNoPlugins;
添加DetailsRecordingPlugin
到跑步者并运行测试。
runner.addplugin(detailsrecordingplugin)结果= runner.run(套件)
result = 1×25 TestResult数组,属性为:Name Passed Failed Incomplete Duration Details总计:18 Passed, 7 Failed (rerun), 7 Incomplete. 0.12529 seconds testing time。
要检索有关随机数生成行为的更多信息,请从细节
测试结果的结构。
详细信息= [结果.Details]
details = 1×25结构数组的字段:ActualValue ExpectedValue
创建一个数组,其中包含每个测试中的实际值和期望值之间的差值,然后在条形图中显示错误值。长度大于0.1的七个小节对应的是失败的测试。
ERRORINMEAN = CELL2MAT([详情.ExpectedValue]) - Cell2MAT([详细信息.ActualValue]);酒吧(ERRORINMEAN)XLABEL(“实验”)ylabel('错误')
addlistener
|matlab.unittest.fixtures.Fixture
|matlab.unittest.plugins.plugindata.ResultDetails
|matlab.unittest.plugins.TestRunnerPlugin
|matlab.unittest.testresult.
|matlab.unittest.testrunner.
|matlab.unittest.TestSuite