主要内容

编写基于脚本的单元测试

此示例显示如何编写测试您创建的函数的脚本。示例函数计算右三角形的角度,并且您可以创建基于脚本的单元测试以测试该功能。

创建Righttri函数来测试

在文件中创建这个函数,rightTri.m,在您当前的MATLAB®文件夹。这个函数以三角形的两条边的长度作为输入,并返回相应的直角三角形的三个角。输入边是三角形的两条短边,而不是斜边。

函数A = atand(sides(1)/sides(2)));B = atand(边(2)/(1)两侧);斜边=边(1)/信德(一个);C = asind(斜边*信德(A) /(1)两侧);[A B C];结束

创建测试脚本

在您的工作文件夹中,创建一个新脚本,rightTriTest.m.每个单元测试检查不同的输出rightTri函数。测试脚本必须遵守以下约定:

  • 测试文件的名称必须以“test”开头或结尾,不区分大小写。如果文件名不是以“test”开头或结尾,在某些情况下,文件中的测试可能会被忽略。

  • 将每个单元测试放在脚本文件的单独部分中。每个部分以两个百分号开始(%%),然后同一行上的文本将成为测试元素的名称。如果后面没有文本%%, MATLAB为测试指定一个名称。如果MATLAB遇到测试失败,它仍然运行剩余的测试。

  • 在测试脚本中,共享变量部分包含出现在第一个显式代码部分之前的任何代码(以%%).测试共享您在本节中定义的变量。在测试中,您可以修改这些变量的值。但是,在随后的测试中,该值被重置为共享变量部分中定义的值。

  • 在共享变量部分(第一个代码部分)中,定义测试所需的任何先决条件。如果输入或输出不满足这一前提条件,MATLAB将不运行任何测试。MATLAB将测试标记为失败和不完整。

  • 当脚本作为测试运行时,在一个测试中定义的变量不能在其他测试中访问,除非它们是在共享变量部分(第一个代码部分)中定义的。类似地,测试无法访问在其他工作空间中定义的变量。

  • 如果脚本文件不包含任何代码段,MATLAB将从脚本文件的全部内容生成单个测试元素。测试元素的名称与脚本文件的名称相同。在这种情况下,如果MATLAB遇到一个失败的测试,它会暂停整个脚本的执行。

rightTriTest.m,写四个测试来测试输出rightTri.使用断言函数测试不同的条件。在共享变量部分,定义四个三角形几何图形,并定义一个先决条件rightTri函数返回一个直角三角形。

%测试三角形Tri = [7 9];triIso = [4 4];Tri306090 =[2 2*根号(3)];triSkewed = [1 1500];%先决条件角= rightTri(三);断言(角(3)= = 90,"基本问题:rightTri不能生成直角三角形"%%测试1:角度之和角= rightTri(三);assert(sum(angles) == 180) angles = rightTri(triIso);assert(sum(angles) == 180) angles = rightTri(tri306090);assert(sum(angles) == 180) angles = rightTri(triSkewed);断言(和(角)= = 180)测试二:等腰三角形角度= righttri(Triiso);断言(角度(1)== 45)断言(角度(1)==角度(2))测试3:30-60-90三角形角= rightTri (tri306090);Assert(角度(1)== 30)Assert(角度(2)== 60)Assert(角度(3)== 90)%%测试4:小角度近似角= rightTri (triSkewed);smallAngle角=(π/ 180)* (1);%弧度约=罪(smallAngle);断言(约= = smallAngle,“小角度近似问题”

测试1测试三角形的两个角之和。如果和不等于180度,断言抛出一个错误。

测试2测试,如果两侧相等,则相应的角度是相等的。如果非正确角度并不等于45度,则断言函数抛出错误。

测试3测试,如果三角形侧面是1SQRT(3),角是30度,60度和90度。如果这个条件不成立,断言抛出一个错误。

测试4测试小角度近似。小角度近似指出,对于小角度,弧度中的角度的正弦大致等于角度。如果不是真的,断言抛出一个错误。

运行测试

执行runtests函数运行中的四个测试rightTriTest.m.这runtests函数分别执行每个代码段中的每个测试。如果测试1失败,MATLAB仍然运行其余的测试。如果你执行rightTriTest作为一个脚本而不是使用runtests,如果遇到失败的断言,MATLAB将暂停整个脚本的执行。此外,当您使用runtests函数,MATLAB提供信息测试诊断。

结果= runtests (“rightTriTest”);
运行rightTriTest . .================================================================================ 错误发生在rightTriTest / Test3_30_60_90Triangle和它不运行完成。--------- 错误ID : --------- ' MATLAB:断言:失败了 ' -------------- 错误的细节 : -------------- 错误使用rightTriTest(31行)断言失败。================================================================================ .================================================================================ 错误发生在rightTriTest / Test4_SmallAngleApproximation和它不运行完成。--------- 错误ID : --------- '' -------------- 错误的细节 : -------------- 错误使用rightTriTest小角度近似(39)行问题  ================================================================================ .完成rightTriTest  __________ 失败失败总结:名字不完整的原因(s ) =========================================================================== rightTriTest / Test3_30_60_90Triangle X X错误。--------------------------------------------------------------------------- rightTriTest / Test4_SmallAngleApproximation X X错误。

测试30-60-90在浮点数的比较中,三角形和小角度近似的检验都失败了。通常,在比较浮点值时,要指定比较的公差。在测试3和测试4中,MATLAB在失败的断言处抛出一个错误,并没有完成测试。因此,测试被标记为两者失败的不完整

提供诊断资料(错误的细节),这比“断言失败”(测试3),考虑将消息传递给断言功能(如在测试4中)。或者您也可以考虑使用基于功能的单元测试。

修改测试以使用公差

节省rightTriTest.m作为rightTriTolTest.m,并修改测试3和测试4使用公差。在测试3和测试4中,不是断言角度等于一个期望值,而是断言实际值和期望值之间的差小于或等于一个指定的公差。在测试脚本的共享变量部分中定义容忍度,这样两个测试都可以访问它。

对于基于脚本的单元测试,手动验证两个值之间的差异是否小于指定的公差。相反,如果您编写基于函数的单元测试,则可以在比较浮点值时访问内置约束来指定公差。

%测试三角形Tri = [7 9];triIso = [4 4];Tri306090 =[2 2*根号(3)];triSkewed = [1 1500];定义一个绝对公差tol = 1e-10;%先决条件角= rightTri(三);断言(角(3)= = 90,"基本问题:rightTri不能生成直角三角形"%%测试1:角度之和角= rightTri(三);assert(sum(angles) == 180) angles = rightTri(triIso);assert(sum(angles) == 180) angles = rightTri(tri306090);assert(sum(angles) == 180) angles = rightTri(triSkewed);断言(和(角)= = 180)测试二:等腰三角形角度= righttri(Triiso);断言(角度(1)== 45)断言(角度(1)==角度(2))测试3:30-60-90三角形角= rightTri (tri306090);Assert (abs(角度(1)-30)<= tol)%%测试4:小角度近似角= rightTri (triSkewed);smallAngle角=(π/ 180)* (1);%弧度约=罪(smallAngle);断言(Abs(abs-smallangle)<= tol,“小角度近似问题”

重新运行测试。

结果= runtests (“rightTriTolTest”);
运行rightTriTolTest……完成rightTriTolTest  __________

所有的测试都通过了。

创建一个测试结果表。

rt =表(结果)
rt = 4×6表名传递失败的不完整的持续时间的细节  _________________________________________________ ______ ______ __________ _________ ____________ {' rightTriTolTest / Test1_SumOfAngles '}真假假0.02373{1×1 struct} {' rightTriTolTest / Test2_IsoscelesTriangles '}真假假0.0047332{1×1 struct}{'rightTriTolTest/Test3_30_60_90Triangle'} true false false 0.00582 {1×1 struct} {'rightTriTolTest/Test4_SmallAngleApproximation'} true false false 0.0049869 {1×1 struct}

另请参阅

|

相关话题