В этом примере показано, как записать единичный тест для нескольких свойств фигурных осей MATLAB ® с использованием новых приборов и приборов для файлов.
Создайте файл, содержащий основную функцию, которая проверяет свойства осей фигур и включает две тестовые функции. Одна функция проверяет правильность границ оси X, а другая - правильность цвета грани поверхности.
В папке на пути MATLAB создайте axesPropertiesTest.m. В основной функции этого файла, иметь functiontests создать массив тестов из каждой локальной функции в axesPropertiesTest.m с вызовом localfunctions функция.
% Copyright 2015 The MathWorks, Inc. function tests = axesPropertiesTest tests = functiontests(localfunctions); end
Функции файлового приспособления - это код установки и разрыва, который выполняется один раз в тестовом файле. Эти приспособления совместно используются в тестовом файле. В этом примере функции файлового приспособления создают временную папку и устанавливают ее в качестве текущей рабочей папки. Они также создают и сохраняют новую фигуру для тестирования. После завершения тестов платформа восстанавливает исходную рабочую папку и удаляет временную папку и сохраненный рисунок.
В этом примере функция-помощник создает простую фигуру - красный цилиндр. В более реалистичном сценарии этот код является частью тестируемого продукта и является дорогостоящим в вычислительном отношении, что мотивирует намерение создать фигуру только один раз и загрузить независимые копии результата для каждой тестовой функции. В этом примере, однако, необходимо создать эту вспомогательную функцию как локальную функцию для axesPropertiesTest. Обратите внимание, что тестовый массив не включает функцию, поскольку его имя не начинается и не заканчивается на «test».
Напишите вспомогательную функцию, создающую простой красный цилиндр, и добавьте ее как локальную функцию в axesPropertiesTest.
% Copyright 2015 The MathWorks, Inc. function f = createFigure f = figure; ax = axes('Parent', f); cylinder(ax,10) h = findobj(ax,'Type','surface'); h.FaceColor = [1 0 0]; end
Необходимо назвать функции настройки и отрывного устройства для тестирования файлов setupOnce и teardownOnceсоответственно. Эти функции принимают один входной аргумент, testCase, в которую тестовый фреймворк автоматически передает объект тестового случая функции. Этот объект тестового случая содержит TestData структура, позволяющая передавать данные между функциями настройки, тестирования и разрыва. В этом примере TestData структура использует назначенные поля для хранения исходного пути, имени временной папки и имени файла фигуры.
Создание функций настройки и разрыва в качестве локальных функций для axesPropertiesTest.
% Copyright 2015 The MathWorks, Inc. function setupOnce(testCase) % create and change to temporary folder testCase.TestData.origPath = pwd; testCase.TestData.tmpFolder = ['tmpFolder' datestr(now,30)]; mkdir(testCase.TestData.tmpFolder) cd(testCase.TestData.tmpFolder) % create and save a figure testCase.TestData.figName = 'tmpFig.fig'; aFig = createFigure; saveas(aFig,testCase.TestData.figName,'fig') close(aFig) end function teardownOnce(testCase) delete(testCase.TestData.figName) cd(testCase.TestData.origPath) rmdir(testCase.TestData.tmpFolder) end
Свежие приборы - это настройка уровня функции и код разрыва, который запускается до и после каждой тестовой функции в файле. В этом примере функции открывают сохраненный рисунок и находят маркеры. После тестирования структура закрывает рисунок.
Необходимо назвать новые функции приспособления setup и teardownсоответственно. Подобно функциям файлового приспособления, эти функции принимают один входной аргумент, testCase. В этом примере эти функции создают новое поле в TestData структура, включающая ручки к фигуре и к осям. Это позволяет передавать информацию между функциями установки, тестирования и разрыва.
Создание функций настройки и разрыва в качестве локальных функций для axesPropertiesTest. Откройте сохраненный рисунок для каждого теста, чтобы обеспечить независимость теста.
% Copyright 2015 The MathWorks, Inc. function setup(testCase) testCase.TestData.Figure = openfig(testCase.TestData.figName); testCase.TestData.Axes = findobj(testCase.TestData.Figure,... 'Type','Axes'); end function teardown(testCase) close(testCase.TestData.Figure) end
В дополнение к пользовательским настройкам и разрывам кода, платформа Unit Testing Framework предоставляет некоторые классы для создания приборов. Для получения дополнительной информации см. matlab.unittest.fixtures.
Каждый тест - это локальная функция, которая следует соглашению об именовании «test» в начале или конце имени функции. Тестовый массив не включает локальные функции, которые не соответствуют этому соглашению. Подобно функциям установки и разрыва, отдельные тестовые функции должны принимать один входной аргумент, testCase. Этот объект тестового случая используется для проверок, утверждений, предположений и функций неустранимых утверждений.
testDefaultXLim функциональный тест проверяет, что предельные значения оси X достаточно велики для отображения цилиндра. Нижний предел должен быть меньше -10, и верхний предел должен быть больше, чем 10. Эти значения получены из фигуры, сгенерированной в функции-помощнике - цилиндре с 10 радиус единицы измерения, центрированный по началу координат. Эта тестовая функция открывает рисунок, созданный и сохраненный в setupOnce , запрашивает ограничение осей и проверяет правильность ограничений. Квалификационные функции, verifyLessThanOrEqual и verifyGreaterThanOrEqual, принимает тестовый случай, фактическое значение, ожидаемое значение и дополнительную диагностическую информацию для отображения в случае отказа в качестве входных данных.
Создать testDefaultXLim функция как локальная функция для axesPropertiesTest.
% Copyright 2015 The MathWorks, Inc. function testDefaultXLim(testCase) xlim = testCase.TestData.Axes.XLim; verifyLessThanOrEqual(testCase, xlim(1), -10,... 'Minimum x-limit was not small enough') verifyGreaterThanOrEqual(testCase, xlim(2), 10,... 'Maximum x-limit was not big enough') end
surfaceColorTest функция обращается к фигуре, созданной и сохраненной в setupOnce функция. surfaceColorTest запрашивает цвет грани цилиндра и проверяет, что он красный. Красный цвет имеет значение RGB [1 0 0]. Квалификационная функция, verifyEqual, принимает в качестве входных данных тестовый случай, фактическое значение, ожидаемое значение и дополнительную диагностическую информацию для отображения в случае отказа. Обычно при использовании verifyEqual для значений с плавающей запятой задается допуск для сравнения. Дополнительные сведения см. в разделе matlab.unittest.constraints.
Создать surfaceColorTest функция как локальная функция для axesPropertiesTest.
% Copyright 2015 The MathWorks, Inc. function surfaceColorTest(testCase) h = findobj(testCase.TestData.Axes,'Type','surface'); co = h.FaceColor; verifyEqual(testCase, co, [1 0 0],'FaceColor is incorrect') end
Теперь axesPropertiesTest.m файл содержит основную функцию, функции приспособления для файла, функции свежего приспособления и две функции локального тестирования. Вы готовы выполнить тесты.
Следующим шагом является выполнение тестов с помощью runtests функция. В этом примере вызов runtests приводит к следующим шагам:
Основная функция создает тестовый массив.
Файловый прибор записывает рабочую папку, создает временную папку, устанавливает временную папку в качестве рабочей, затем создает и сохраняет фигуру.
Новая настройка приспособления открывает сохраненную фигуру и находит ручки.
testDefaultXLim выполняется тест.
Свежий отрыв приспособления закрывает фигуру.
Новая настройка приспособления открывает сохраненную фигуру и находит ручки.
surfaceColorTest выполняется тест.
Свежий отрыв приспособления закрывает фигуру.
Файловое приспособление удаляет сохраненную фигуру, изменяет исходный путь и удаляет временную папку.
В командной строке создайте и запустите набор тестов.
results = runtests('axesPropertiesTest.m')
Running axesPropertiesTest
..
Done axesPropertiesTest
__________
results =
1x2 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
2 Passed, 0 Failed, 0 Incomplete.
2.2457 seconds testing time.
Чтобы получить доступ к функциям, доступным для таблиц, создайте их из TestResult объект.
rt = table(results)
rt =
2x6 table
Name Passed Failed Incomplete Duration Details
_______________________________________ ______ ______ __________ ________ ____________
{'axesPropertiesTest/testDefaultXLim' } true false false 1.7082 {1x1 struct}
{'axesPropertiesTest/surfaceColorTest'} true false false 0.53751 {1x1 struct}
Экспорт результатов теста в электронную таблицу Excel ®.
writetable(rt,'myTestResults.xls')
Сортировка результатов теста путем увеличения продолжительности.
sortrows(rt,'Duration')
ans =
2x6 table
Name Passed Failed Incomplete Duration Details
_______________________________________ ______ ______ __________ ________ ____________
{'axesPropertiesTest/surfaceColorTest'} true false false 0.53751 {1x1 struct}
{'axesPropertiesTest/testDefaultXLim' } true false false 1.7082 {1x1 struct}
matlab.unittest.constraints | matlab.unittest.fixtures