用于生成自定义测试输出格式的插件
本示例演示如何创建一个插件,该插件使用自定义格式将最终测试结果写入到输出流。
创建插件
在工作文件夹下的文件中,创建从 matlab.unittest.plugins.TestRunnerPlugin
类继承的 ExampleCustomPlugin
类。在插件类中:
定义插件的
Stream
属性,用于存储OutputStream
实例。默认情况下,该插件会写入标准输出。覆盖
TestRunnerPlugin
的默认runTestSuite
方法,以输出指示测试运行程序正运行新测试会话的文本。如果您要写入单个日志文件,此信息特别有用,因为它可让您区分测试运行。覆盖
TestRunnerPlugin
的默认reportFinalizedResult
方法,以将最终测试结果写入输出流。您可以修改print
方法,以便以适用于您的测试日志或持续集成系统的方式输出测试结果。
classdef ExampleCustomPlugin < matlab.unittest.plugins.TestRunnerPlugin properties (Access=private) Stream end methods function p = ExampleCustomPlugin(stream) if ~nargin stream = matlab.automation.streams.ToStandardOutput; end validateattributes(stream, ... {'matlab.automation.streams.OutputStream'},{}) p.Stream = stream; end end methods (Access=protected) function runTestSuite(plugin,pluginData) plugin.Stream.print('\n--- NEW TEST SESSION at %s ---\n',... char(datetime)) runTestSuite@... matlab.unittest.plugins.TestRunnerPlugin(plugin,pluginData); end function reportFinalizedResult(plugin,pluginData) thisResult = pluginData.TestResult; if thisResult.Passed status = 'PASSED'; elseif thisResult.Failed status = 'FAILED'; elseif thisResult.Incomplete status = 'SKIPPED'; end plugin.Stream.print(... '### YPS Company - Test %s ### - %s in %f seconds.\n',... status,thisResult.Name,thisResult.Duration) reportFinalizedResult@... matlab.unittest.plugins.TestRunnerPlugin(plugin,pluginData) end end end
创建测试类
在您的工作文件夹中,创建包含以下测试类的文件 ExampleTest.m
。在此测试类中,其中两个测试会通过,其他测试会导致验证或假设失败。
classdef ExampleTest < matlab.unittest.TestCase methods(Test) function testOne(testCase) testCase.assertGreaterThan(5,1) end function testTwo(testCase) wrongAnswer = 'wrong'; testCase.verifyEmpty(wrongAnswer,'Not Empty') testCase.verifyClass(wrongAnswer,'double','Not double') end function testThree(testCase) testCase.assumeEqual(7*2,13,'Values not equal') end function testFour(testCase) testCase.verifyEqual(3+2,5) end end end
将插件添加到测试运行程序并运行测试
在命令提示符处,基于 ExampleTest
类创建测试套件,并创建测试运行程序。
import matlab.unittest.TestSuite import matlab.unittest.TestRunner suite = TestSuite.fromClass(?ExampleTest); runner = TestRunner.withNoPlugins;
创建一个 ExampleCustomPlugin
实例并将其添加到测试运行程序。运行测试。
import matlab.automation.streams.ToFile fname = 'YPS_test_results.txt'; p = ExampleCustomPlugin(ToFile(fname)); runner.addPlugin(p) result = runner.run(suite);
查看输出文件的内容。
type(fname)
--- NEW TEST SESSION at 15-Oct-2022 20:30:15 --- ### YPS Company - Test PASSED ### - ExampleTest/testOne in 0.014881 seconds. ### YPS Company - Test FAILED ### - ExampleTest/testTwo in 0.099099 seconds. ### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.073080 seconds. ### YPS Company - Test PASSED ### - ExampleTest/testFour in 0.006351 seconds.
使用同一测试运行程序重新运行 Incomplete
测试。查看输出文件的内容。
suiteFiltered = suite([result.Incomplete]); result2 = runner.run(suiteFiltered); type(fname)
--- NEW TEST SESSION at 15-Oct-2022 20:30:15 --- ### YPS Company - Test PASSED ### - ExampleTest/testOne in 0.014881 seconds. ### YPS Company - Test FAILED ### - ExampleTest/testTwo in 0.099099 seconds. ### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.073080 seconds. ### YPS Company - Test PASSED ### - ExampleTest/testFour in 0.006351 seconds. --- NEW TEST SESSION at 15-Oct-2022 20:31:00 --- ### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.018080 seconds.
另请参阅
matlab.unittest.plugins.TestRunnerPlugin
| matlab.automation.streams.OutputStream
| matlab.automation.streams.ToFile
| matlab.automation.streams.ToStandardOutput