Этот пример показывает, как записать тест на основе скриптов, который использует локальные функции в качестве функций помощника. Функция, взятая в качестве примера, аппроксимирует синус и косинус угла. Тест на основе скриптов проверяет приближение с помощью локальных функций, чтобы проверить на равенство в допуске.
Создание Функции 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, чтобы запустить эти четыре теста в 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]