MATLAB xUnit Test Framework: How to Write xUnit-Style Tests by Subclassing TestCase
The MATLAB xUnit architecture is based closely on the xUnit style, in which each test case is an instance of a subclass of the base TestCase class. Programmers who are familiar with this style may want to write their own TestCase subclasses instead of using subfunction-based tests.
This example shows a TestCase subclass containing test case methods and test fixture methods. If you are not familiar with defining your own classes in MATLAB, you might want to review the MATLAB documentation on classes and object-oriented programming, or you can simply stick to using subfunction-based tests.
The sample M-file begins with the classdef statement, which sets the name of the class and indicates that it is a subclass of TestCase.
cd examples_general dbtype TestUsingTestCase 1
1 classdef TestUsingTestCase < TestCase
The properties block contains a field that is initialized by the setup method and is used by the two test methods.
dbtype TestUsingTestCase 3:5
3 properties 4 fh 5 end
The first method in the methods block is the constructor. It takes the desired test method name as its input argument, and it passes that input along to the base class constructor.
dbtype TestUsingTestCase 7:10
7 methods 8 function self = TestUsingTestCase(name) 9 self = self@TestCase(name); 10 end
The setUp method creates a figure window and stores its handle in the field fh.
dbtype TestUsingTestCase 12:14
12 function setUp(self) 13 self.fh = figure; 14 end
Test methods are those beginning with "test".
dbtype TestUsingTestCase 20:26
20 function testColormapColumns(self) 21 assertEqual(size(get(self.fh, 'Colormap'), 2), 3); 22 end 23 24 function testPointer(self) 25 assertEqual(get(self.fh, 'Pointer'), 'arrow'); 26 end
The tearDown method cleans up by deleting the figure window.
dbtype TestUsingTestCase 16:18
16 function tearDown(self) 17 delete(self.fh); 18 end
Run the test cases in the class by calling runtests with the name of the class.
Starting test run with 2 test cases. .. PASSED in 0.095 seconds.