exponenta event banner

needsReset

Класс: matlab.unittest.fixtures.Fixture
Пакет: 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