exponenta event banner

Настройка записи и отрывной код с использованием классов

Испытательные приспособления

Тестовые приборы - это код настройки и разрыва, который устанавливает предустановленное состояние системы и возвращает его в исходное состояние после выполнения теста. Методы настройки и отрыва определены в TestCase по следующим атрибутам метода:

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

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

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

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

Тестовый пример с кодом настройки на уровне метода

Следующий тестовый случай, FigurePropertiesTest, содержит код установки на уровне метода. 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

Тестовый пример с кодом настройки уровня класса

Следующий тестовый случай, 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

См. также

|

Связанные темы