Запись теста на основе скриптов Используя локальные функции

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

Создание Функции approxSinCos, чтобы Протестировать

Создайте эту функцию в файле, approxSinCos.m, в вашей текущей папке MATLAB. Эта функция берет угол в радианах и аппроксимирует синус и косинус угла с помощью Ряда Тейлора.

function [sinA,cosA] = approxSinCos(x)
% For a given angle in radians, approximate the sine and cosine of the angle
% using Taylor series.
sinA = x;
cosA = 1;
altSign = -1;
for n = 3:2:26
sinA = sinA + altSign*(x^n)/factorial(n);
cosA = cosA + altSign*(x^(n-1))/factorial(n-1);
altSign = -altSign;
end

Создание тестового скрипта

В вашей текущей папке MATLAB создайте новый скрипт, approxSinCosTest.m m.

Примечание: Включая функции в скриптах требует MATLAB® R2016b или позже.

%% Test 0rad
% Test expected values of 0
[sinApprox,cosApprox] = approxSinCos(0);
assertWithAbsTol(sinApprox,0)
assertWithRelTol(cosApprox,1)

%% Test 2pi
% Test expected values of 2pi
[sinApprox,cosApprox] = approxSinCos(2*pi);
assertWithAbsTol(sinApprox,0)
assertWithRelTol(cosApprox,1)

%% Test pi over 4 equality
% Test sine and cosine of pi/4 are equal
[sinApprox,cosApprox] = approxSinCos(pi/4);
assertWithRelTol(sinApprox,cosApprox,'sine and cosine should be equal')

%% Test matches MATLAB fcn
% Test values of 2pi/3 match MATLAB output for the sin and cos functions
x = 2*pi/3;
[sinApprox,cosApprox] = approxSinCos(x);
assertWithRelTol(sinApprox,sin(x),'sin does not match')
assertWithRelTol(cosApprox,cos(x),'cos does not match')

function assertWithAbsTol(actVal,expVal,varargin)
% Helper function to assert equality within an absolute tolerance.
% Takes two values and an optional message and compares
% them within an absolute tolerance of 1e-6.
tol = 1e-6;
tf = abs(actVal-expVal) <= tol;
assert(tf, varargin{:});
end

function assertWithRelTol(actVal,expVal,varargin)
% Helper function to assert equality within a relative tolerance.
% Takes two values and an optional message and compares
% them within a relative tolerance of 0.1%.
relTol = 0.001;
tf = abs(expVal - actVal) <= relTol.*abs(expVal);
assert(tf, varargin{:});
end

Каждый модульный тест использует assert, чтобы проверить различный вывод функции approxSinCos. Как правило, когда вы сравниваете значения с плавающей точкой, вы задаете допуск к сравнению. assertWithAbsTol локальных функций и assertWithRelTol являются функциями помощника, чтобы вычислить, равны ли фактические и ожидаемые значения в заданном абсолютном или относительном допуске.

  • Test 0rad тестирует, являются ли вычисленные и ожидаемые значения для угла 0 радианов в абсолютном допуске 1e-6 или относительном допуске 0,1%. Как правило, вы используете абсолютный допуск, чтобы сравнить значения близко к 0.

  • Test 2pi тестирует, равны ли вычисленные и ожидаемые значения для угла радианов в абсолютном допуске 1e-6 или относительном допуске 0,1%.

  • Test pi over 4 equality тестирует, равны ли синус и косинус в относительном допуске 0,1%.

  • Test matches MATLAB fcn тестирует, равны ли вычисленный синус и косинус значениям от sin и функций cos в относительном допуске 0,1%.

Runtests

Выполните функцию runtests, чтобы запустить эти четыре теста в approxSinCosTest.m m. Функция runtests выполняет каждый тест индивидуально. Если один тест перестал работать, MATLAB все еще запускает остающиеся тесты. Если вы выполняете approxSinCosTest как скрипт вместо того, чтобы использовать runtests, выполнение остановов MATLAB целого скрипта, если это сталкивается с не пройдено утверждением. Кроме того, когда вы запускаете тесты с помощью функции runtests, MATLAB обеспечивает информативный диагностический тест.

results = runtests('approxSinCosTest');
Running approxSinCosTest
....
Done approxSinCosTest
__________

Вся тестовая передача.

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

rt = table(results)
rt =

  4x6 table

                     Name                      Passed    Failed    Incomplete    Duration      Details   
    _______________________________________    ______    ______    __________    ________    ____________

    'approxSinCosTest/Test0rad'                true      false       false        0.24592    [1x1 struct]
    'approxSinCosTest/Test2pi'                 true      false       false       0.021949    [1x1 struct]
    'approxSinCosTest/TestPiOver4Equality'     true      false       false       0.018169    [1x1 struct]
    'approxSinCosTest/TestMatchesMATLABFcn'    true      false       false       0.032889    [1x1 struct]

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

|

Связанные примеры

Больше о

Была ли эта тема полезной?