Написание кода для настройки и деинициализации Используя классы

Испытательные стенды

Test fixtures является настройкой и кодом отключения, который настраивает предварительное состояние системы и возвращает его в исходное состояние после запущения теста. Setup и методы отключения заданы в классе TestCase следующими атрибутами метода:

  • TestMethodSetup и методы TestMethodTeardown запущены до и после каждого метода тестирования.

  • TestClassSetup и методы TestClassTeardown, запущенные до и после всех методов тестирования в тесте.

Среда тестирования гарантирует, что TestMethodSetup и методы TestClassSetup суперклассов выполняются перед теми в подклассах.

Это - хорошая практика для тестовых авторов, чтобы выполнить все действия отключения из TestMethodSetup и блоков TestClassSetup с помощью метода addTeardown вместо того, чтобы реализовать соответствующие методы отключения в блоках TestClassTeardown и TestMethodTeardown. Это гарантирует, что отключение выполняется в обратном порядке настройки и также гарантирует, что содержание теста является безопасным исключением.

Тест с кодом Setup уровня метода

Следующий тест, FigurePropertiesTest, содержит код настройки на уровне метода. Метод TestMethodSetup создает фигуру прежде, чем запустить каждый тест, и TestMethodTeardown закрывает фигуру впоследствии. Как обсуждено ранее, необходимо попытаться задать действия отключения с методом 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

Тест с кодом Setup уровня класса

Следующий тест, BankAccountTest, содержит код настройки на уровне класса.

Чтобы установить BankAccountTest, который тестирует пример класса BankAccount, описанный в Разработке Классов — Типичный Рабочий процесс, добавляет, метод 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

Смотрите также

|

Похожие темы