Создайте фиксатор, который удаляет папку из пути поиска файлов MATLAB®, и дайте среде тестирования команду сбрасывать состояние среды, если фиксатор делается недействительным. Затем используйте фиксатор в качестве разделяемого испытательного стенда при запущении тестов в нескольких классах.
Этот пример принимает что подпапка 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
.
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
.