テスト ランナーへのプラグインの追加
この例では、プラグインをテスト ランナーに追加する方法を説明します。この例では、matlab.unittest.plugins.TestRunProgressPlugin
クラスを使用して作成した、テスト実行の進行状況を報告するプラグインを追加します。
BankAccount
クラスのテストの作成
現在のフォルダー内の BankAccount.m
という名前のファイルに、BankAccount
クラスを作成します。
classdef BankAccount < handle properties (Access = ?AccountManager) AccountStatus = 'open'; end properties (SetAccess = private) AccountNumber AccountBalance end properties (Transient) AccountListener end events InsufficientFunds end methods function BA = BankAccount(accNum,initBal) BA.AccountNumber = accNum; BA.AccountBalance = initBal; BA.AccountListener = AccountManager.addAccount(BA); end function deposit(BA,amt) BA.AccountBalance = BA.AccountBalance + amt; if BA.AccountBalance > 0 BA.AccountStatus = 'open'; end end function withdraw(BA,amt) if (strcmp(BA.AccountStatus,'closed') && ... BA.AccountBalance < 0) disp(['Account ',num2str(BA.AccountNumber), ... ' has been closed.']) return end newbal = BA.AccountBalance - amt; BA.AccountBalance = newbal; if newbal < 0 notify(BA,'InsufficientFunds') end end function getStatement(BA) disp('-------------------------') disp(['Account: ',num2str(BA.AccountNumber)]) ab = sprintf('%0.2f',BA.AccountBalance); disp(['CurrentBalance: ',ab]) disp(['Account Status: ',BA.AccountStatus]) disp('-------------------------') end end methods (Static) function obj = loadobj(s) if isstruct(s) accNum = s.AccountNumber; initBal = s.AccountBalance; obj = BankAccount(accNum,initBal); else obj.AccountListener = AccountManager.addAccount(s); end end end end
現在のフォルダー内の BankAccountTest.m
という名前の別のファイルに、BankAccount
クラスをテストするためのテスト クラスを作成します。
classdef 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
テスト スイートの作成
BankAccountTest
テスト クラスからテスト スイートを作成します。
suite = matlab.unittest.TestSuite.fromClass(?BankAccountTest);
プラグインなしのテストの実行
プラグインなしでテスト ランナーを作成し、それを使用してテストを実行します。テスト ランナーでテストがサイレントに実行され、いずれのメッセージも表示されません。
runner = matlab.unittest.TestRunner.withNoPlugins; runner.run(suite);
プラグインありのテストの実行
テスト ランナーに TestRunProgressPlugin
インスタンスを追加し、もう一度テストを実行します。今度は、テスト ランナーでは BankAccountTest
のテスト実行の進行状況が表示されます。(既定のテスト ランナーにはこのプラグインが既に含まれています。)
import matlab.unittest.plugins.TestRunProgressPlugin
runner.addPlugin(TestRunProgressPlugin.withVerbosity(2))
runner.run(suite);
Running BankAccountTest ..... Done BankAccountTest __________