Запись теста с использованием функций Setup и Teardown

В этом примере показано, как написать модульный тест для пары свойств figure axes MATLAB ® с помощью свежих фиксаторов и файловых фиксаторов.

Создайте файл axesPropertiesTest

Создайте файл, содержащий главную функцию, которая проверяет свойства осей рисунка и включает две тестовые функции. Одна функция проверяет, что пределы оси X верны, а другая - что цвет грани поверхности правильен.

В папке на пути MATLAB создайте axesPropertiesTest.m. В основной функции этого файла, иметь functiontests создать массив тестов из каждой локальной функции в axesPropertiesTest.m с вызовом localfunctions функция.


% Copyright 2015 The MathWorks, Inc.

function tests = axesPropertiesTest
tests = functiontests(localfunctions);
end

Создайте функции Fixture файла

Функции фиксатор - это настройка и код отключения, который запускается один раз в вашем тестовом файле. Эти фиксаторы совместно используются в тестовом файле. В этом примере функции файла фиксатора создают временную папку и устанавливают ее как текущую рабочую папку. Они также создают и сохраняют новый рисунок для проверки. После завершения тестов среда восстанавливает исходную рабочую папку и удаляет временную папку и сохранённый рисунок.

В этом примере вспомогательная функция создает простой рисунок - красный цилиндр. В более реалистичном сценарии этот код является частью тестируемого продукта и является в вычислительном отношении дорогим, таким образом мотивируя намерение создать рисунок только один раз и загрузить независимые копии результата для каждой тестовой функции. В данном примере, однако, вы хотите создать эту вспомогательную функцию как локальную функцию, чтобы 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 приводит к следующим шагам:

  1. Основная функция создает тестовый массив.

  2. File fixture записывает рабочую папку, создает временную папку, устанавливает временную папку в качестве рабочей папки, затем генерирует и сохраняет рисунок.

  3. Новая настройка фиксатора открывает сохранённый рисунок и находит указатели.

  4. The testDefaultXLim тест запускается.

  5. Отключение свежего фиксатора закрывает рисунок.

  6. Новая настройка фиксатора открывает сохранённый рисунок и находит указатели.

  7. The surfaceColorTest тест запускается.

  8. Отключение свежего фиксатора закрывает рисунок.

  9. Отключение фиксатора удаляет сохранённый рисунок, возвращается к исходному пути и удаляет временную папку.

В командной строке сгенерируйте и запустите тестовый набор.

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}

См. также

|

Похожие темы