Test fixtures are setup and teardown
code that sets up the pretest state of the system and returns it to
the original state after running the test. Setup and teardown methods
are defined in the TestCase
class by the following
method attributes:
TestMethodSetup
and TestMethodTeardown
methods
run before and after each test method.
TestClassSetup
and TestClassTeardown
methods
run before and after all test methods in the test case.
The testing framework guarantees that TestMethodSetup
and TestClassSetup
methods
of superclasses are executed before those in subclasses.
It is good practice for test authors to perform all teardown
activities from within the TestMethodSetup
and TestClassSetup
blocks
using the addTeardown
method instead of implementing
corresponding teardown methods in the TestMethodTeardown
and TestClassTeardown
blocks.
This guarantees the teardown is executed in the reverse order of the
setup and also ensures that the test content is exception safe.
The following test case, FigurePropertiesTest
,
contains setup code at the method level. The TestMethodSetup
method
creates a figure before running each test, and TestMethodTeardown
closes
the figure afterwards. As discussed previously, you should try to
define teardown activities with the addTeardown
method.
However, for illustrative purposes, this example shows the implementation
of a TestMethodTeardown
block.
classdef FigurePropertiesTest < matlab.unittest.TestCase properties TestFigure end methods(TestMethodSetup) function createFigure(testCase) % comment testCase.TestFigure = figure; end end methods(TestMethodTeardown) function closeFigure(testCase) close(testCase.TestFigure) end end methods(Test) function defaultCurrentPoint(testCase) cp = testCase.TestFigure.CurrentPoint; testCase.verifyEqual(cp, [0 0], ... 'Default current point is incorrect') end function defaultCurrentObject(testCase) import matlab.unittest.constraints.IsEmpty co = testCase.TestFigure.CurrentObject; testCase.verifyThat(co, IsEmpty, ... 'Default current object should be empty') end end end
The following test case, BankAccountTest
,
contains setup code at the class level.
To setup the BankAccountTest
, which tests
the BankAccount
class example described in Developing Classes — Typical Workflow, add
a TestClassSetup
method, addBankAccountClassToPath
.
This method adds the path to the BankAccount
example
file. Typically, you set up the path using a PathFixture
.
this example performs the setup and teardown activities manually for
illustrative purposes.
classdef BankAccountTest < matlab.unittest.TestCase % Tests the BankAccount class. methods (TestClassSetup) function addBankAccountClassToPath(testCase) p = path; testCase.addTeardown(@path,p); addpath(fullfile(matlabroot,'help','techdoc','matlab_oop',... 'examples')); end end methods (Test) function testConstructor(testCase) b = BankAccount(1234, 100); testCase.verifyEqual(b.AccountNumber, 1234, ... 'Constructor failed to correctly set account number'); testCase.verifyEqual(b.AccountBalance, 100, ... 'Constructor failed to correctly set account balance'); end function testConstructorNotEnoughInputs(testCase) import matlab.unittest.constraints.Throws; testCase.verifyThat(@()BankAccount, ... Throws('MATLAB:minrhs')); end function testDesposit(testCase) b = BankAccount(1234, 100); b.deposit(25); testCase.verifyEqual(b.AccountBalance, 125); end function testWithdraw(testCase) b = BankAccount(1234, 100); b.withdraw(25); testCase.verifyEqual(b.AccountBalance, 75); end function testNotifyInsufficientFunds(testCase) callbackExecuted = false; function testCallback(~,~) callbackExecuted = true; end b = BankAccount(1234, 100); b.addlistener('InsufficientFunds', @testCallback); b.withdraw(50); testCase.assertFalse(callbackExecuted, ... 'The callback should not have executed yet'); b.withdraw(60); testCase.verifyTrue(callbackExecuted, ... 'The listener callback should have fired'); end end end
addTeardown
| matlab.unittest.TestCase