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

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

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

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

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

Runtests

Выполните runtests функционируйте, чтобы запустить эти четыре теста в approxSinCosTest.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.27184    {1x1 struct}
    {'approxSinCosTest/Test2pi'             }    true      false       false       0.017969    {1x1 struct}
    {'approxSinCosTest/TestPiOver4Equality' }    true      false       false       0.017694    {1x1 struct}
    {'approxSinCosTest/TestMatchesMATLABFcn'}    true      false       false       0.034819    {1x1 struct}

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

|

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

Больше о

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