主要内容

创建自定义插件

这个例子展示了如何创建一个自定义插件来计数传递和失败断言的数量TestRunner正在运行测试套件。插件在测试结束时打印一个简短的摘要。延长TestRunner类的选择方法matlab.unittest.plugins.TestRunnerPlugin类。

创建AssertionCountingPlugin类

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

为了跟踪传递和失败断言的数量,定义两个只读属性,NumPassingAssertionsNumFailingAssertions,在一个属性块。

属性(SetAccess = private) NumPassingAssertions结束

扩展TestSuite的运行

实现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(见定义辅助方法).

扩展共享测试fixture和TestCase实例的创建

添加监听器AssertionPassedAssertionFailed事件来计数断言。要添加这些侦听器,请扩展测试框架使用的方法来创建测试内容。测试内容包括TestCase为每个实例测试元素,类级别TestCase实例的TestClassSetupTestClassTeardown方法,夹具使用的实例TestCase类的SharedTestFixtures属性。

在重写创建方法时调用相应的超类方法。创建方法返回测试框架为每个上下文创建的内容。方法实现这些方法时incrementPassingAssertionsCountincrementFailingAssertionsCount辅助方法,将插件所需的监听器添加到返回的夹具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类定义摘要

的完整内容如下所示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)结束结束结束

向TestRunner添加插件并运行测试

在命令提示符处,从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

另请参阅

|||||

相关的话题