# 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.

    runtests TestUsingTestCase

    Starting test run with 2 test cases.
    ..
    PASSED in 0.246 seconds.