Этот пример показывает, как записать тест на основе скриптов, который использует локальные функции в качестве функций помощника. Функция, взятая в качестве примера, аппроксимирует синус и косинус угла. Тест на основе скриптов проверяет приближение с помощью локальных функций, чтобы проверять на равенство в допуске.
Создание Функции 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
, чтобы запустить эти четыре теста в 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.28593 [1x1 struct] 'approxSinCosTest/Test2pi' true false false 0.029066 [1x1 struct] 'approxSinCosTest/TestPiOver4Equality' true false false 0.020769 [1x1 struct] 'approxSinCosTest/TestMatchesMATLABFcn' true false false 0.034231 [1x1 struct]