Write Tests Using Shared Fixtures - MATLAB & Simulink (original) (raw)
You can share test fixtures across test classes using the SharedTestFixtures
attribute of the matlab.unittest.TestCase class. When you share a fixture across test classes that run together, the testing framework sets up the fixture once for all the test classes and tears it down after all the test classes run. If you specify the fixture using the TestClassSetup
methods
block of each class instead, the testing framework sets up the fixture before and tears it down after running each test class.
This example shows how to use shared fixtures when creating tests. It shows how to share a fixture for adding a folder containing source code to the path across two test classes. The test classes use this fixture to access the source code required by the tests.
Open the example to make the source and test code available in your current folder.
openExample("matlab/WriteTestsUsingSharedTestFixturesExample")
DocPolynomTest
Class Definition
This code shows the contents of the DocPolynomTest
class definition file, which uses a shared fixture to access the folder defining the DocPolynom
class. For more information about the DocPolynom
class and to view the class code, see Representing Polynomials with Classes.
classdef (SharedTestFixtures={ ... matlab.unittest.fixtures.PathFixture( ... fullfile("..","fixture_example_source"))}) ... DocPolynomTest < matlab.unittest.TestCase
properties
TextToDisplay = "Equation under test: "
end
methods (Test)
function testConstructor(testCase)
p = DocPolynom([1 0 1]);
testCase.verifyClass(p,?DocPolynom)
end
function testAddition(testCase)
p1 = DocPolynom([1 0 1]);
p2 = DocPolynom([5 2]);
actual = p1 + p2;
expected = DocPolynom([1 5 3]);
diagnostic = [testCase.TextToDisplay ...
"(x^2 + 1) + (5*x + 2) = x^2 + 5*x + 3"];
testCase.verifyEqual(actual,expected,diagnostic)
end
function testMultiplication(testCase)
p1 = DocPolynom([1 0 3]);
p2 = DocPolynom([5 2]);
actual = p1 * p2;
expected = DocPolynom([5 2 15 6]);
diagnostic = [testCase.TextToDisplay ...
"(x^2 + 3) * (5*x + 2) = 5*x^3 + 2*x^2 + 15*x + 6"];
testCase.verifyEqual(actual,expected,diagnostic)
end
end
end
BankAccountTest
Class Definition
This code shows the contents of the BankAccountTest
class definition file, which uses a shared fixture to access the folder defining the BankAccount
class. For more information about the BankAccount
class and to view the class code, see Developing Classes That Work Together.
classdef (SharedTestFixtures={ ... matlab.unittest.fixtures.PathFixture( ... fullfile("..","fixture_example_source"))}) ... BankAccountTest < matlab.unittest.TestCase
methods (Test)
function testConstructor(testCase)
b = BankAccount(1234,100);
testCase.verifyEqual(b.AccountNumber,1234, ...
"Constructor must correctly set account number.")
testCase.verifyEqual(b.AccountBalance,100, ...
"Constructor must correctly set account balance.")
end
function testConstructorNotEnoughInputs(testCase)
import matlab.unittest.constraints.Throws
testCase.verifyThat(@()BankAccount,Throws("MATLAB:minrhs"))
end
function testDeposit(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
Run the Tests
Run the tests in your current folder and its subfolders. The testing framework sets up the shared test fixture, runs the tests in the BankAccountTest
and DocPolynomTest
classes, and tears down the fixture after running the tests. In this example, all of the tests pass.
runtests("IncludeSubfolders",true);
Setting up PathFixture Done setting up PathFixture: Added 'C:\work\WriteTestsUsingSharedTestFixturesExample\fixture_example_source' to the path.
Running BankAccountTest ..... Done BankAccountTest
Running DocPolynomTest ... Done DocPolynomTest
Tearing down PathFixture Done tearing down PathFixture: Restored the path to its original state.
See Also
matlab.unittest.TestCase | matlab.unittest.fixtures.Fixture | matlab.unittest.fixtures.PathFixture