로컬 함수를 사용하는 스크립트 기반 테스트 작성하기
이 예제에서는 로컬 함수를 헬퍼 함수로 사용하는 스크립트 기반 테스트를 작성하는 방법을 보여줍니다. 예제 함수는 각도의 사인과 코사인의 근삿값을 구합니다. 스크립트 기반 테스트는 로컬 함수를 통해 근삿값을 확인하여 허용오차 내에서 동일한지 검사합니다.
테스트할 approxSinCos
함수 생성하기
현재 MATLAB 폴더에서 파일 approxSinCos.m
에 다음 함수를 생성하십시오. 이 함수는 각도(단위: 라디안)를 받은 다음 테일러 급수를 사용하여 각도의 사인과 코사인의 근삿값을 구합니다.
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
은 의 계산된 사인값과 코사인값이 상대 허용오차 0.1% 내에서sin
함수 값 및cos
함수 값과 동일한지 여부를 테스트합니다.
테스트 실행하기
approxSinCosTest.m
의 네 개의 테스트를 실행하려면 runtests
함수를 실행하십시오. runtests
함수는 각 테스트를 개별적으로 실행합니다. 그중 한 테스트가 실패하더라도 MATLAB은 나머지 테스트를 실행합니다. runtests
를 사용하는 대신 스크립트로 approxSinCosTest
를 실행하는 경우, 어설션이 실패하면 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.34695 {1x1 struct} {'approxSinCosTest/Test2pi' } true false false 0.018663 {1x1 struct} {'approxSinCosTest/TestPiOver4Equality' } true false false 0.021571 {1x1 struct} {'approxSinCosTest/TestMatchesMATLABFcn'} true false false 0.033244 {1x1 struct}