使用实时脚本编写测试
此示例说明如何编写实时脚本 'TestRightTriLiveScriptExample.mlx'
来对您创建的函数进行测试。该示例函数可计算直角三角形的角度,而您将创建一个基于实时脚本的单元测试来测试该函数。
基于实时脚本的测试必须遵循以下惯例:
测试文件的名称必须以单词“test”开头或结尾,且不区分大小写。如果文件名不以单词“test”开头或结尾,则在某些情况下,文件中的测试可能被忽略。
一个单元测试在实时脚本文件中占一节。如果节有标题 1 样式的标题,则该标题将成为测试元素的名称。否则,MATLAB® 会为测试分配一个名称。
考虑以何种方式运行基于实时脚本的测试。如果您使用实时编辑器中的运行按钮来运行测试,则 MATLAB 遇到一次测试失败时,即会停止执行脚本,且不再运行剩余的测试。如果您使用单元测试框架(例如使用
runtests
函数)来运行实时脚本,则 MATLAB 遇到一次测试失败后,仍会运行剩余的测试。当实时脚本以测试方式运行时,在一个测试中定义的变量在其他测试中不可访问。同样,这些测试也不能访问在其他工作区中定义的变量。
在此示例之外,在您的当前 MATLAB 文件夹下的文件 rightTri.m
中创建一个函数。此函数将三角形的两条边长作为输入,返回所对应直角三角形的三个角的度数。输入的边是三角形两个较短的边,而不是斜边。
type rightTri.m
function angles = rightTri(sides) A = atand(sides(1)/sides(2)); B = atand(sides(2)/sides(1)); hypotenuse = sides(1)/sind(A); C = asind(hypotenuse*sind(A)/sides(1)); angles = [A B C]; end
测试:小角度近似
您可以在实时脚本中纳入方程和图像,以帮助记录测试。为小角度近似创建以下测试。通常,当您比较浮点值时,需要指定比较的容差。
rightTri
函数应返回与小角度近似一致的值,使得 。
angles = rightTri([1 1500]); smallAngleInRadians = (pi/180)*angles(1); % convert to radians approx = sin(smallAngleInRadians); assert(abs(approx-smallAngleInRadians) <= 1e-10, 'Problem with small angle approximation')
测试:角度求和
您可以在同一测试中包含多个 assert
语句。但是,如果第一个断言失败,MATLAB 将不会计算剩余的语句。
生成的直角三角形的所有角度之和应始终为 180 度。
angles = rightTri([7 9]); assert(sum(angles) == 180) angles = rightTri([4 4]); assert(sum(angles) == 180) angles = rightTri([2 2*sqrt(3)]); assert(sum(angles) == 180)
测试:30-60-90 三角形
测试验证三角形的两条边分别减为 1 和 。在此情况下,各角度分别为 。
tol = 1e-10; angles = rightTri([2 2*sqrt(3)]); assert(abs(angles(1)-30) <= tol) assert(abs(angles(2)-60) <= tol) assert(abs(angles(3)-90) <= tol)
测试:等腰三角形
对于等腰三角形,两个非直角都必须为 45 度,否则 assert
会引发错误。
测试验证三角形的两条边相等。在这种情况下,对应的角度是相等的。
angles = rightTri([4 4]); assert(angles(1) == 45) assert(angles(1) == angles(2))
要运行您的测试,最佳做法是通过 runtests
函数来使用测试框架,而不是使用实时编辑器中的运行按钮。测试框架可提供其他诊断信息。如遇测试失败,该框架将继续运行后续测试,而使用实时编辑器中的运行按钮则不会运行后续测试。例如,要在 MATLAB 命令提示符下运行此测试,请键入 result = runtests('TestRightTriLiveScriptExample')
。有关详细信息,请参阅runtests
。