使用局部函数编写基于脚本的测试
以下示例演示如何编写将局部函数用作辅助函数的基于脚本的测试。示例函数会近似计算角的正弦和余弦。基本脚本的测试将通过使用局部函数检查在容差范围内是否相等来查看近似度。
创建要测试的 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
函数中的值。
运行测试
执行 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}