Запись Setup и отключения с использованием классов

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

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

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

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

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

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

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

Следующий тест, FigurePropertiesTest, содержит код настройки на уровне метода. The TestMethodSetup метод создает рисунок перед запуском каждого теста и TestMethodTeardown закрывает рисунок после. Как обсуждалось ранее, вы должны попытаться задать операции отключения с addTeardown способ. Однако в иллюстративных целях этот пример показывает реализацию TestMethodTeardown блок.

classdef FigurePropertiesTest < matlab.unittest.TestCase
    
    properties
        TestFigure
    end
    
    methods(TestMethodSetup)
        function createFigure(testCase)
            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 пример класса, описанный в Developing Classes - Typical Workflow, добавить 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

См. также

|

Похожие темы