needsReset

Класс: matlab.unittest.fixtures.Fixture
Пакет: matlab.unittest.fixtures

Сообщите, должен ли разделяемый испытательный стенд быть сброшен

Синтаксис

Описание

пример

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

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

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

развернуть все

Разделяемый испытательный стенд, чтобы подтвердить в виде экземпляра matlab.unittest.fixtures.Fixture класс.

Примеры

развернуть все

Создайте фиксатор, который удаляет папку из пути поиска файлов 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