В этом примере показано, как написать модульный тест для пары свойств figure axes 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
В дополнение к пользовательскому коду настройки и отключения, Модульное Тестирование Framework предоставляет некоторые классы для создания фиксаторов. Для получения дополнительной информации смотрите matlab.unittest.fixtures
.
Каждый тест является локальной функцией, которая следует соглашению об именовании, имеющему «test» в начале или конце имени функции. Тестовый массив не включает локальные функции, которые не следуют этому соглашению. Подобно функциям настройки и отключения, отдельные тестовые функции должны принимать один входной параметр, testCase
. Используйте этот объект теста для верификаций, утверждений, допущений и функций критических утверждений.
The testDefaultXLim
function test проверяет, что пределы оси 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
The 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
файл дополнен основной функцией, функциями фиксатор, свежими функциями fixture и двумя локальными тестовыми функциями. Вы готовы запустить тесты.
Следующим шагом является запуск тестов с использованием runtests
функция. В этом примере вызов функции runtests
приводит к следующим шагам:
Основная функция создает тестовый массив.
File fixture записывает рабочую папку, создает временную папку, устанавливает временную папку в качестве рабочей папки, затем генерирует и сохраняет рисунок.
Новая настройка фиксатора открывает сохранённый рисунок и находит указатели.
The testDefaultXLim
тест запускается.
Отключение свежего фиксатора закрывает рисунок.
Новая настройка фиксатора открывает сохранённый рисунок и находит указатели.
The 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