Main Content

로컬 함수를 사용하는 스크립트 기반 테스트 작성하기

이 예제에서는 로컬 함수를 헬퍼 함수로 사용하는 스크립트 기반 테스트를 작성하는 방법을 보여줍니다. 예제 함수는 각도의 사인과 코사인의 근삿값을 구합니다. 스크립트 기반 테스트는 로컬 함수를 통해 근삿값을 확인하여 허용오차 내에서 동일한지 검사합니다.

테스트할 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 함수의 다른 출력값을 확인합니다. 통상적으로 부동소수점 값을 비교할 때는 비교를 위한 허용오차를 지정합니다. 로컬 함수 assertWithAbsTolassertWithRelTol은 실제 값과 예상 값이 지정된 절대 허용오차 또는 상대 허용오차 내에서 동일한지 여부를 알아내는 헬퍼 함수입니다.

  • 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$의 계산된 사인값과 코사인값이 상대 허용오차 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}

참고 항목

|

관련 예제

세부 정보