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