主要内容

编写插件以添加数据以测试结果

这个例子展示了如何创建一个插件来添加数据TestResult对象。该插件将断言中的实际和预期值附加细节财产的财产TestResult目的。延长TestRunner,插件覆盖选择方法matlab.unittest.plugins.TestRunnerPlugin类。

创建插件类

在当前文件夹中的文件中,创建自定义插件类DetailsRecordingPlugin,继承自TestRunnerPlugin类。的完整代码DetailsRecordingPlugin,请参阅DetailsRecordingPlugin类定义摘要

将实际值和期望值存储在TestResult对象,定义两个常量属性,ActFieldExpField,在一个特性堵塞。设置价值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类。每个调用将空字段添加到细节结构。

创建共享测试夹具和TestCase实例

添加听众断言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类定义摘要

该代码提供了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)));结束结束结束

向TestRunner添加插件并运行测试

在命令提示符下,从中创建一个测试套件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('错误'

条形图描绘误差与实验

另请参阅

||||||

相关话题