这个例子展示了如何创建一个自定义插件来计数传递和失败断言的数量TestRunner
正在运行测试套件。插件在测试结束时打印一个简短的摘要。延长TestRunner
类的选择方法matlab.unittest.plugins.TestRunnerPlugin
类。
在当前文件夹中的一个文件中,创建自定义插件类AssertionCountingPlugin
,继承自TestRunnerPlugin
类。的完整代码AssertionCountingPlugin
,请参阅AssertionCountingPlugin类定义摘要.
为了跟踪传递和失败断言的数量,定义两个只读属性,NumPassingAssertions
和NumFailingAssertions
,在一个属性
块。
属性(SetAccess = private) NumPassingAssertions结束
实现runTestSuite
方法在一个方法
块与受保护的
访问。
方法(访问=保护)函数runTestSuite(plugin, pluginData) suiteSize = numel(pluginData. testsuite);流('##总共运行%d个测试\n'suiteSize)插件。NumPassingAssertions = 0;插件。NumFailingAssertions = 0;runTestSuite@matlab.unittest.plugins.TestRunnerPlugin (...插件,pluginData);流('##运行测试\n') plugin.printAssertionSummary ()结束结束
测试框架对该方法进行一次评估。它显示有关测试总数的信息,初始化插件用于生成文本输出的属性,并调用超类方法。在框架完成对超类方法的计算后,runTestSuite
方法通过调用助手方法显示断言计数汇总printAssertionSummary
(见定义辅助方法).
添加监听器AssertionPassed
和AssertionFailed
事件来计数断言。要添加这些侦听器,请扩展测试框架使用的方法来创建测试内容。测试内容包括TestCase
为每个实例测试
元素,类级别TestCase
实例的TestClassSetup
和TestClassTeardown
方法,夹具
使用的实例TestCase
类的SharedTestFixtures
属性。
在重写创建方法时调用相应的超类方法。创建方法返回测试框架为每个上下文创建的内容。方法实现这些方法时incrementPassingAssertionsCount
和incrementFailingAssertionsCount
辅助方法,将插件所需的监听器添加到返回的夹具
或TestCase
实例。
将这些创建方法添加到方法
块与受保护的
访问。
方法(访问=保护)函数= createSharedTestFixture(plugin, pluginData...matlab.unittest.plugins.TestRunnerPlugin(plugin, pluginData); fixture.addlistener(“AssertionPassed”,...@ (~ ~) plugin.incrementPassingAssertionsCount);fixture.addlistener (“AssertionFailed”,...@ (~ ~) plugin.incrementFailingAssertionsCount);结束函数testCase = createTestClassInstance(plugin, pluginData)...matlab.unittest.plugins.TestRunnerPlugin(plugin, pluginData); testCase.addlistener(“AssertionPassed”,...@ (~ ~) plugin.incrementPassingAssertionsCount);testCase.addlistener (“AssertionFailed”,...@ (~ ~) plugin.incrementFailingAssertionsCount);结束函数testCase = createTestMethodInstance(plugin, pluginData)...matlab.unittest.plugins.TestRunnerPlugin(plugin, pluginData); testCase.addlistener(“AssertionPassed”,...@ (~ ~) plugin.incrementPassingAssertionsCount);testCase.addlistener (“AssertionFailed”,...@ (~ ~) plugin.incrementFailingAssertionsCount);结束结束
扩展小牛
在运行时显示每个测试的名称。将此方法包含在方法
块与受保护的
访问。像所有的插件方法一样小牛
方法要求您调用相应的超类方法。
方法(访问=保护)函数小牛(插件,pluginData)流('###运行测试:%s\n'pluginData.Name) runTest@matlab.unittest.plugins.TestRunnerPlugin (...插件,pluginData);结束结束
在一个方法
块与私人
访问,定义三个帮助器方法。这些方法增加传递或失败断言的数量,并打印断言计数摘要。
方法(访问=私人)函数incrementPassingAssertionsCount(插件)插件。NumPassingAssertions =插件。NumPassingAssertions + 1;结束函数incrementFailingAssertionsCount(插件)插件。NumFailingAssertions =插件。NumFailingAssertions + 1;结束函数printAssertionSummary(插件)流(“% s \ n”repmat (“_”, 1, 30)) fprintf(“总断言:% d \ n”,...插件。NumPassingAssertions + plugin.NumFailingAssertions'\t%d通过,%d失败\n',...插件。NumPassingAssertions plugin.NumFailingAssertions)结束结束
的完整内容如下所示AssertionCountingPlugin
.
classdefAssertionCountingPlugin <...matlab.unittest.plugins.TestRunnerPlugin属性(SetAccess = private) NumPassingAssertions结束方法(访问=保护)函数runTestSuite(plugin, pluginData) suiteSize = numel(pluginData. testsuite);流('##总共运行%d个测试\n'suiteSize)插件。NumPassingAssertions = 0;插件。NumFailingAssertions = 0;runTestSuite@matlab.unittest.plugins.TestRunnerPlugin (...插件,pluginData);流('##运行测试\n') plugin.printAssertionSummary ()结束函数= createSharedTestFixture(plugin, pluginData...matlab.unittest.plugins.TestRunnerPlugin(plugin, pluginData); fixture.addlistener(“AssertionPassed”,...@ (~ ~) plugin.incrementPassingAssertionsCount);fixture.addlistener (“AssertionFailed”,...@ (~ ~) plugin.incrementFailingAssertionsCount);结束函数testCase = createTestClassInstance(plugin, pluginData)...matlab.unittest.plugins.TestRunnerPlugin(plugin, pluginData); testCase.addlistener(“AssertionPassed”,...@ (~ ~) plugin.incrementPassingAssertionsCount);testCase.addlistener (“AssertionFailed”,...@ (~ ~) plugin.incrementFailingAssertionsCount);结束函数testCase = createTestMethodInstance(plugin, pluginData)...matlab.unittest.plugins.TestRunnerPlugin(plugin, pluginData); testCase.addlistener(“AssertionPassed”,...@ (~ ~) plugin.incrementPassingAssertionsCount);testCase.addlistener (“AssertionFailed”,...@ (~ ~) plugin.incrementFailingAssertionsCount);结束函数小牛(插件,pluginData)流('###运行测试:%s\n'pluginData.Name) runTest@matlab.unittest.plugins.TestRunnerPlugin (...插件,pluginData);结束结束方法(访问=私人)函数incrementPassingAssertionsCount(插件)插件。NumPassingAssertions =插件。NumPassingAssertions + 1;结束函数incrementFailingAssertionsCount(插件)插件。NumFailingAssertions =插件。NumFailingAssertions + 1;结束函数printAssertionSummary(插件)流(“% s \ n”repmat (“_”, 1, 30)) fprintf(“总断言:% d \ n”,...插件。NumPassingAssertions + plugin.NumFailingAssertions'\t%d通过,%d失败\n',...插件。NumPassingAssertions plugin.NumFailingAssertions)结束结束结束
在当前文件夹中,创建一个名为ExampleTest.m
包含以下测试类。
classdefExampleTest < matlab.unittest.TestCase方法(测试)函数testOne (testCase)%测试失败testCase。assertEqual (4)结束函数testTwo (testCase)%测试通过testCase。verifyEqual (5,5)结束函数testThree (testCase)%测试通过testCase。assertEqual (7 * 2, 14)结束结束结束
在命令提示符处,从ExampleTest
类。
进口matlab.unittest.TestSuite进口matlab.unittest.TestRunner套件= TestSuite.fromClass (? ExampleTest);
创建一个TestRunner
实例没有插件。这段代码创建了一个静默运行器,并让您控制已安装的插件。
跑步者= TestRunner.withNoPlugins;
运行测试。
结果= runner.run(套);
添加AssertionCountingPlugin
给跑腿的人做测试
run . addplugin (AssertionCountingPlugin) result = run .run(suite);
###总共运行3个测试### #运行测试:ExampleTest/ teston ### #运行测试:ExampleTest/testTwo ### #运行测试:ExampleTest/testThree ###已完成运行测试______________________________ total assertion: 2 1 Passed, 1 Failed
matlab.unittest.plugins.TestRunnerPlugin
|matlab.unittest.plugins.OutputStream
|matlab.unittest.TestCase
|matlab.unittest.TestRunner
|matlab.unittest.fixtures.Fixture
|addlistener