Run a suite of tests and collect the code coverage results. Then, generate a standalone code coverage report as a single HTML file from the coverage results.
Open the example to access the required files and folders. When you open the example, the tests
subfolder of your current folder contains tests defined in the BankAccountTest.m
and DocPolynomTest.m
files. The source
subfolder contains the source code required by the tests.
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("..","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
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("..","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
Collect Code Coverage Results
Import the classes used in this example.
Create a test suite from the tests
folder.
Create a test runner and customize it using a plugin that provides programmatic access to statement, function, and decision coverage metrics for the code in the source
folder.
Run the tests. In this example, all the tests pass.
Setting up PathFixture
Done setting up PathFixture: Added 'C:\work\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.
__________
Because the source
folder contains three files, the Result
property of format
holds the coverage results as a 3-by-1 vector.
results =
3×1 Result array with properties:
Filename
CreationDate
Coverage summary (use generateHTMLReport to generate an HTML report):
Function: 9/17 (52.94%)
Statement: 32/102 (31.37%)
Decision: 11/46 (23.91%)
Use coverageSummary to retrieve information from the coverage results.
Generate Standalone Code Coverage Report
Generate a standalone code coverage report as a single HTML file from the coverage results. The method saves the report using an autogenerated filename to a temporary folder. The report includes tables with detailed information about each source file.
Generating standalone report. Please wait.
Preparing content for the standalone report.
Adding content to the standalone report.
Writing standalone report to file.
Generate a summarized standalone report by including only the statement and function coverage metrics. Save the report as report.html
to your current folder.
Generating standalone report. Please wait.
Preparing content for the standalone report.
Adding content to the standalone report.
Writing standalone report to file.
Standalone code coverage report has been saved to:
C:\work\report.html
Open report.html
.