이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

클래스를 사용하여 설정(Setup) 코드와 해제(Teardown) 코드 작성하기

테스트 픽스처(Fixture)

테스트 픽스처는 시스템의 사전 테스트 상태를 설정하고 테스트 실행 후 이 상태를 원래 상태로 되돌리는 설정 코드와 해제 코드입니다. 설정 메서드와 해제 메서드는 TestCase 클래스에서 다음과 같은 메서드 특성(Attribute)으로 정의됩니다.

  • TestMethodSetup 메서드와 TestMethodTeardown 메서드는 각각의 테스트 메서드 이전과 이후에 실행됩니다.

  • TestClassSetup 메서드와 TestClassTeardown 메서드는 테스트 케이스의 모든 메서드 이전과 이후에 실행됩니다.

테스트 프레임워크는 슈퍼클래스의 TestMethodSetup 메서드와 TestClassSetup 메서드가 동일한 서브클래스의 메서드 이전에 실행되도록 합니다.

테스트 작성자는 TestMethodTeardown 블록과 TestClassTeardown 블록에서 해제 메서드를 구현하는 대신, TestMethodSetup 블록과 TestClassSetup 블록 내에서 addTeardown 메서드를 사용하여 모든 해제 작업을 수행하는 것이 좋습니다. 이렇게 하면 설정의 역순으로 해제가 실행되고 테스트 콘텐츠에서 예외가 발생하지 않게 됩니다.

메서드 단위 설정 코드를 사용한 테스트 케이스

다음 테스트 케이스 FigurePropertiesTest에는 메서드 단위의 설정 코드가 있습니다. TestMethodSetup 메서드는 각각의 테스트 실행 이전에 Figure를 만들며, TestMethodTeardown은 이후에 이 Figure를 닫습니다. 앞에서 설명했던 것처럼, addTeardown 메서드를 사용하여 해제 작업을 정의해야 합니다. 그러나 이 예제에서는 설명을 돕기 위해 TestMethodTeardown 블록의 구현법을 보여줍니다.

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

클래스 단위 설정 코드를 사용한 테스트 케이스

다음 테스트 케이스 BankAccountTest에는 클래스 단위의 설정 코드가 있습니다.

클래스 개발하기 — 일반적인 워크플로에서 설명된 대로 BankAccount 클래스 예제를 테스트하는 BankAccountTest를 설정하려면 TestClassSetup 메서드 addBankAccountClassToPath를 추가하십시오. 이 메서드는 BankAccount 예제 파일에 경로를 추가합니다. 통상적으로 PathFixture를 사용하여 경로를 설정합니다. 이 예제에서는 설명을 돕기 위해 수동으로 설정 작업과 해제 작업을 수행합니다.

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

참고 항목

|

관련 항목