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