Написание основанного на скриптах теста с использованием локальных функций

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

Создание 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.

Примечание. Включение функций в скрипты требует 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 проверяет$2\pi$, равны ли вычисленные и ожидаемые значения для угла радианов в абсолютной погрешности 1e-6 или относительная погрешность 0,1%.

  • Test pi over 4 equality проверяет$pi/4$, равны ли синус и косинус в относительной погрешности 0,1%.

  • Test matches MATLAB fcn проверяет$2pi/3$, равны ли вычисленные синус и косинус значениям из sin и cos функционирует в относительную погрешность 0,1%.

Запуск тестов

Выполните runtests функция для запуска четырех тестов в approxSinCosTest.m. The runtests функция выполняет каждый тест индивидуально. Если один тест не проходит, MATLAB все еще запускает оставшиеся тесты. Если вы выполняете approxSinCosTest как скрипт вместо использования runtestsMATLAB останавливает выполнение всего скрипта, если он сталкивается со сбоем проверки типа «assertion». Кроме того, когда вы запускаете тесты с использованием 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.30835    {1x1 struct}
    {'approxSinCosTest/Test2pi'             }    true      false       false       0.019019    {1x1 struct}
    {'approxSinCosTest/TestPiOver4Equality' }    true      false       false       0.020224    {1x1 struct}
    {'approxSinCosTest/TestMatchesMATLABFcn'}    true      false       false       0.034992    {1x1 struct}

См. также

|

Похожие примеры

Подробнее о