Main Content

使用实时脚本编写测试

此示例说明如何编写实时脚本 '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 函数应返回与小角度近似一致的值,使得 sin(θ)θ

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')

测试:角度求和

kak=180

您可以在同一测试中包含多个 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 三角形

triangle.png

测试验证三角形的两条边分别减为 1 和 3。在此情况下,各角度分别为 30, 60, and 90

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

另请参阅

|

相关主题