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