exponenta event banner

Тест записи с использованием функций установки и разбиения

В этом примере показано, как записать единичный тест для нескольких свойств фигурных осей MATLAB ® с использованием новых приборов и приборов для файлов.

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

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

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

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

  3. Новая настройка приспособления открывает сохраненную фигуру и находит ручки.

  4. testDefaultXLim выполняется тест.

  5. Свежий отрыв приспособления закрывает фигуру.

  6. Новая настройка приспособления открывает сохраненную фигуру и находит ручки.

  7. 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}

См. также

|

Связанные темы