Plugin to Generate Custom Test Output Format
This example shows how to create a plugin that uses a custom format to write finalized test results to an output stream.
Create Plugin
In a file in your working folder, create a class,
ExampleCustomPlugin
, that inherits from the
matlab.unittest.plugins.TestRunnerPlugin
class. In the
plugin class:
Define a
Stream
property on the plugin that stores theOutputStream
instance. By default, the plugin writes to standard output.Override the default
runTestSuite
method ofTestRunnerPlugin
to output text that indicates the test runner is running a new test session. This information is especially useful if you are writing to a single log file, as it allows you to differentiate the test runs.Override the default
reportFinalizedResult
method ofTestRunnerPlugin
to write finalized test results to the output stream. You can modify theprint
method to output the test results in a format that works for your test logs or continuous integration system.
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
Create Test Class
In your working folder, create the file ExampleTest.m
containing the following test class. In this test class, two of the tests pass
and the others result in a verification or assumption failure.
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
Add Plugin to Test Runner and Run Tests
At the command prompt, create a test suite from the
ExampleTest
class, and create a test runner.
import matlab.unittest.TestSuite import matlab.unittest.TestRunner suite = TestSuite.fromClass(?ExampleTest); runner = TestRunner.withNoPlugins;
Create an instance of ExampleCustomPlugin
and add it to the
test runner. Run the tests.
import matlab.automation.streams.ToFile fname = 'YPS_test_results.txt'; p = ExampleCustomPlugin(ToFile(fname)); runner.addPlugin(p) result = runner.run(suite);
View the contents of the output file.
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.
Rerun the Incomplete
tests using the same test runner. View
the contents of the output file.
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.
See Also
matlab.unittest.plugins.TestRunnerPlugin
| matlab.automation.streams.OutputStream
| matlab.automation.streams.ToFile
| matlab.automation.streams.ToStandardOutput