Тест записи Используя Setup и функции отключения

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

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

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

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

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

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

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

В этом примере функция помощника создает простую фигуру — красный цилиндр. В более реалистическом сценарии этот код является частью продукта под тестом и является в вычислительном отношении дорогим, таким образом мотивируя намерение создать фигуру только однажды и загрузить независимые копии результата для каждой тестовой функции. В данном примере однако вы хотите создать эту функцию помощника как локальную функцию к axesPropertiesTest. Обратите внимание на то, что тестовый массив не включает функцию, потому что ее имя не начинается или заканчивается 'тестом'.

Запишите функцию помощника, которая создает простой красный цилиндр, и добавьте его как локальную функцию к axesPropertiesTest.

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.

function setupOnce(testCase)
% Create and change to temporary folder
testCase.TestData.origPath = pwd;
testCase.TestData.tmpFolder = "tmpFolder" + ...
    string(datetime('now','Format',"yyyyMMdd'T'HHmmss"));
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)
close(aFig)
end

function teardownOnce(testCase)
delete(testCase.TestData.figName)
cd(testCase.TestData.origPath)
rmdir(testCase.TestData.tmpFolder)
end

Создание новых функций фиксатора

Новые фиксаторы являются настройкой функционального уровня и кодом отключения, который запускается до и после каждой тестовой функции в вашем файле. В этом примере функции открывают сохраненную фигуру и находят указатели. После тестирования среда закрывает фигуру.

Необходимо назвать новые функции фиксатора setup и teardown, соответственно. Подобно функциям фиксатора файла эти функции берут один входной параметр testCase. В этом примере эти функции создают новое поле в TestData структура, которая включает указатели на фигуру и на оси. Это позволяет информации передавать между настройкой, тестом и функциями отключения.

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

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

В дополнение к пользовательской настройке и коду отключения, среда тестирования обеспечивает некоторые классы для создания фиксаторов. Для получения дополнительной информации смотрите matlab.unittest.fixtures.

Создание тестовых функций

Каждый тест является локальной функцией, которая следует соглашению о присвоении имен наличия 'теста' вначале или конца имени функции. Тестовый массив не включает локальные функции, которые не следуют этому соглашению. Подобно настройке и функциям отключения, отдельные тестовые функции должны принять один входной параметр testCase. Используйте этот объект теста для верификаций, утверждений, предположений и критических утверждений.

testDefaultXLim функция проверяет, что пределы оси X являются достаточно большими, чтобы отобразить цилиндр. Нижний предел должен быть меньше -10, и верхний предел должен быть больше 10. Эти значения прибывают от фигуры, сгенерированной в функции помощника — цилиндр с 10 модульный радиус сосредоточен на источнике. Эта тестовая функция открывает фигуру, созданную и сохраненную в setupOnce функция, запрашивает предел осей и проверяет, что пределы правильны. Проверка функционирует verifyLessThanOrEqual и verifyGreaterThanOrEqual возьмите в качестве входных параметров тест, фактическое значение, ожидаемое значение и дополнительную диагностическую информацию, чтобы отобразиться в случае отказа.

Создайте testDefaultXLim функционируйте как локальную функцию к axesPropertiesTest.

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 large enough')
end

surfaceColorTest функциональные доступы фигура, которую вы создали и сохраненный в setupOnce функция. surfaceColorTest запрашивает цвет поверхности цилиндра и проверяет, что это красно. Красный цвет имеет значение RGB [1 0 0]. Функция проверки verifyEqual берет в качестве входных параметров тест, фактическое значение, ожидаемое значение и дополнительную диагностическую информацию, чтобы отобразиться в случае отказа. Обычно при использовании verifyEqual на значениях с плавающей точкой вы задаете допуск к сравнению. Для получения дополнительной информации смотрите matlab.unittest.constraints.

Создайте surfaceColorTest функционируйте как локальную функцию к axesPropertiesTest.

function surfaceColorTest(testCase)
h = findobj(testCase.TestData.Axes,'Type','surface');
co = h.FaceColor;
verifyEqual(testCase,co,[1 0 0],'Face color is incorrect')
end

Теперь axesPropertiesTest.m файл вместе с основной функцией, функцией помощника, функциями фиксатора файла, новыми функциями фиксатора и двумя тестовыми функциями. Вы готовы запустить тесты.

Runtests

Следующий шаг должен запустить тесты с помощью runtests функция. В этом примере, вызове runtests результаты в следующих шагах:

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

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

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

  4. testDefaultXLim тестовые прогоны.

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

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

  7. surfaceColorTest тестовые прогоны.

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

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

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

results = runtests('axesPropertiesTest.m')
Running axesPropertiesTest
..
Done axesPropertiesTest
__________
results = 
  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.5124 seconds testing time.

Составление таблицы результатов испытаний

К функциональности доступа, доступной для таблиц, создайте один из TestResult объекты.

rt = table(results)
rt=2×6 table
                     Name                      Passed    Failed    Incomplete    Duration      Details   
    _______________________________________    ______    ______    __________    ________    ____________

    {'axesPropertiesTest/testDefaultXLim' }    true      false       false       0.35239     {1×1 struct}
    {'axesPropertiesTest/surfaceColorTest'}    true      false       false       0.16001     {1×1 struct}

Сортировка результатов испытаний путем увеличения длительности.

sortrows(rt,'Duration')
ans=2×6 table
                     Name                      Passed    Failed    Incomplete    Duration      Details   
    _______________________________________    ______    ______    __________    ________    ____________

    {'axesPropertiesTest/surfaceColorTest'}    true      false       false       0.16001     {1×1 struct}
    {'axesPropertiesTest/testDefaultXLim' }    true      false       false       0.35239     {1×1 struct}

Экспортируйте результаты испытаний в электронную таблицу Excel®.

writetable(rt,'myTestResults.xls')

Смотрите также

|

Похожие темы