Main Content

테스트 실행기(Test Runner)에 플러그인 추가하기

이 예제에서는 테스트 실행기에 플러그인을 추가하는 방법을 보여줍니다. 예제에서는 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
__________

참고 항목