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% 的相对容差范围内是否等于 sincos 函数中的值。

运行测试

执行 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.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}

另请参阅

|

相关示例

详细信息