needsReset

Класс: фиксатор
Пакет: matlab.unittest.fixtures

Сообщите, нужно ли сбрасывать общий испытательный стенд

Синтаксис

Описание

пример

tf = needsReset(fixture) сообщает о валидности общего теста fixture в среду тестирования. Если на fixture является недопустимым и должен быть сброшен, затем метод возвращает логический 1 (true). В противном случае возвращается логический 0 (false). Общий испытательный стенд действителен, если состояние тестового окружения, сконфигурированное фиксатором, поддерживается в течение всего сеанса тестирования.

Для тестовых классов, которые используют общий испытательный стенд, среда вызывает needsReset метод всякий раз, когда исполнитель тестов переключается на последующий класс. Если метод возвращается trueзатем среда автоматически разрывает общий испытательный стенд и настраивает его для последующих классов. Среда выполняет действия, определенные teardown или addTeardown методы для срыва недействительного фиксатора и действия, заданные setup способ настройки фиксатора. Поэтому ваша needsReset реализация не должна включать код, который выполняет фиксатор настройки или отключения.

Входные параметры

расширить все

Общий испытательный стенд для проверки, заданное как образец matlab.unittest.fixtures.Fixture класс.

Признаки

Accessprotected

Чтобы узнать об атрибутах методов, см. «Атрибуты метода».

Примеры

расширить все

Создайте фиксатор, которое удаляет папку из пути поиска файлов MATLAB ®, и проинструктируйте среду тестирования сбросить состояние окружения, если фиксатор признано недействительным. Затем используйте фиксатор как общий испытательный стенд при запуске тестов в нескольких классах.

Этот пример принимает, что подпапка helperFiles в текущей папке существует путь. Создайте подпапку, если она не существует, и убедитесь, что она находится в пути.

if ~isfolder('helperFiles')
    mkdir helperFiles
end
addpath('helperFiles')

В файле в текущей папке создайте фиксатор с именем RemoveFolderFromPathFixture который устанавливает состояние окружения путем удаления папки из пути. Чтобы гарантировать одно и то же состояние окружения для всех тестовых классов, которые используют фиксатор как общий испытательный стенд, переопределите needsReset способ. Метод возвращает true если указанная папка находится в пути, когда исполнитель тестов переключается на последующий класс.

classdef RemoveFolderFromPathFixture < matlab.unittest.fixtures.Fixture
    properties (SetAccess = immutable)
        Folder (1,1) string % Full path to the folder
    end
    methods
        function fixture = RemoveFolderFromPathFixture(folder)
            fixture.Folder = folder;
        end
        function setup(fixture)
            originalPath = path;
            fixture.addTeardown(@()path(originalPath));
            rmpath(fixture.Folder)
        end
    end
    methods (Access = protected)
        function tf = isCompatible(fixture1,fixture2)
            tf = fixture1.Folder == fixture2.Folder;
        end
        function tf = needsReset(fixture)
            foldersOnPath = split(path,pathsep);
            tf = ismember(fixture.Folder,foldersOnPath);
        end
    end
end

В текущей папке создайте три тестовых класса, которые используют RemoveFolderFromPathFixture как общий испытательный стенд.

В файле с именем SampleTestA.m, создать SampleTestA класс.

classdef (SharedTestFixtures = { ...
        RemoveFolderFromPathFixture(fullfile(pwd,'helperFiles'))}) ...
        SampleTestA < matlab.unittest.TestCase
    methods (Test)
        function test1(testCase)
            import matlab.unittest.constraints.ContainsSubstring
            f = testCase.getSharedTestFixtures;
            testCase.assertThat(path,~ContainsSubstring(f.Folder))
        end
    end
end

В файле с именем SampleTestB.m, создать SampleTestB класс. Тест в классе добавляет helperFiles на путь.

classdef (SharedTestFixtures = { ...
        RemoveFolderFromPathFixture(fullfile(pwd,'helperFiles'))}) ...
        SampleTestB < matlab.unittest.TestCase
    methods (Test)
        function test1(testCase)
            import matlab.unittest.constraints.ContainsSubstring
            f = testCase.getSharedTestFixtures;
            addpath('helperFiles')
            testCase.assertThat(path,ContainsSubstring(f.Folder))
        end
    end
end

В файле с именем SampleTestC.m, создать SampleTestC класс.

classdef (SharedTestFixtures = { ...
        RemoveFolderFromPathFixture(fullfile(pwd,'helperFiles'))}) ...
        SampleTestC < matlab.unittest.TestCase
    methods (Test)
        function test1(testCase)
            import matlab.unittest.constraints.ContainsSubstring
            f = testCase.getSharedTestFixtures;
            testCase.assertThat(path,~ContainsSubstring(f.Folder))
        end
    end
end

Создайте тестовый набор и запустите тесты. Чтобы подтвердить совместный испытательный стенд, среда тестирования вызывает needsReset метод, когда исполнитель тестов переключается на SampleTestB и SampleTestC.

suite = [testsuite('SampleTestA') testsuite('SampleTestB') ...
    testsuite('SampleTestC')];
runner = matlab.unittest.TestRunner.withTextOutput;   
results = runner.run(suite);
Setting up RemoveFolderFromPathFixture
Done setting up RemoveFolderFromPathFixture
__________

Running SampleTestA
.
Done SampleTestA
__________

Running SampleTestB
.
Done SampleTestB
__________

Tearing down RemoveFolderFromPathFixture
Done tearing down RemoveFolderFromPathFixture
__________

Setting up RemoveFolderFromPathFixture
Done setting up RemoveFolderFromPathFixture
__________

Running SampleTestC
.
Done SampleTestC
__________

Tearing down RemoveFolderFromPathFixture
Done tearing down RemoveFolderFromPathFixture
__________

SampleTestA не повреждает состояние окружения, заданное как RemoveFolderFromPathFixture. Поэтому среда использует установленный фиксатор для работы SampleTestB. Однако SampleTestB повреждает состояние окружения путем добавления helperFiles на путь. Среда срывает фиксатор и настраивает его между вызовами на SampleTestB и SampleTestC.

Введенный в R2020b