主要内容

使用设置和拆卸函数编写测试

这个例子展示了如何使用fresh fixture和file fixture为几个MATLAB®图形轴属性编写单元测试。

创建axesPropertiesTest文件

创建一个文件,其中包含测试图形轴属性的主函数,并包含两个测试函数。一个函数验证x轴极限是否正确,另一个函数验证曲面的表面颜色是否正确。

在MATLAB路径下的一个文件夹中创建axesPropertiesTest.m.在这个文件的主要功能中,有functiontests中每个本地函数创建测试数组axesPropertiesTest.m打电话给localfunctions函数。

The MathWorks, Inc.版权所有函数测试= axesPropertiesTest;结束

创建文件Fixture函数

文件fixture函数是在测试文件中运行一次的设置和拆卸代码。这些fixture在测试文件中共享。在本例中,文件fixture函数创建一个临时文件夹并将其设置为当前工作文件夹。它们还创建并保存一个新的图形以供测试。测试完成后,框架将恢复原来的工作文件夹,并删除临时文件夹和已保存的图。

在本例中,helper函数创建了一个简单的图形—一个红色圆柱。在更现实的场景中,这段代码是被测试产品的一部分,在计算上代价很高,因此只创建一次图形,并为每个测试功能加载结果的独立副本。但是,对于本例,您希望将此helper函数创建为to的本地函数axesPropertiesTest.注意,test数组不包括函数,因为它的名称没有以' test '开头或结尾。

编写一个帮助函数,创建一个简单的红色圆柱,并将其作为局部函数添加到axesPropertiesTest

The MathWorks, Inc.版权所有函数f = createFigure f = figure;ax =轴(“父”f);圆柱h = findobj(ax, 10)“类型”“表面”);h.FaceColor = [1 0 0];结束

您必须命名文件测试fixture的设置和拆卸函数setupOnceteardownOnce,分别。这些函数只接受一个输入参数,testCase,测试框架自动向其中传递一个函数测试用例对象。这个测试用例对象包含TestData结构,允许数据在设置、测试和拆卸函数之间传递。在本例中TestData结构使用分配的字段来存储原始路径、临时文件夹名称和图形文件名。

创建setup和teardown函数作为本地函数axesPropertiesTest

The MathWorks, Inc.版权所有函数setupOnce (testCase)%创建并更改到临时文件夹testCase.TestData.origPath = pwd;testCase.TestData.tmpFolder = [“tmpFolder”datestr (30)];mkdir (testCase.TestData.tmpFolder) cd (testCase.TestData.tmpFolder)%创建并保存一个图形testCase.TestData.figName =“tmpFig.fig”;aFig = createFigure;saveas (aFig testCase.TestData.figName,“图”关闭(aFig)结束函数删除(testCase. testdata . figname) cd(testCase. testdata . origpath) rmdir(testCase. testdata . tmpfolder)结束

创建新鲜的夹具功能

Fresh fixture是在文件中每个测试函数之前和之后运行的函数级设置和拆卸代码。在本例中,函数打开保存的图形并找到句柄。测试之后,框架关闭图形。

必须命名新的fixture函数设置拆卸,分别。与文件fixture函数类似,这些函数接受单个输入参数,testCase.在本例中,这些函数在TestData结构,包括对图形和轴的处理。这允许信息在设置、测试和拆卸函数之间传递。

创建setup和teardown函数作为本地函数axesPropertiesTest.为每个测试打开保存的图,以确保测试独立性。

The MathWorks, Inc.版权所有函数设置testCase的testCase. testdata . figure = openfig(testCase. testdata . figname);testCase.TestData.Axes = findobj (testCase.TestData.Figure,...“类型”“轴”);结束函数拆卸(testCase)关闭(testCase.TestData.Figure)结束

除了自定义设置和拆卸代码外,单元测试框架还提供了一些用于创建fixture的类。有关更多信息,请参见matlab.unittest.fixtures

创建测试功能

每个测试都是一个局部函数,它遵循在函数名的开头或结尾使用“test”的命名约定。测试数组不包括不遵循此约定的局部函数。与设置和拆卸函数类似,单个测试函数必须接受单个输入参数,testCase.将此测试用例对象用于验证、断言、假设和致命断言函数。

testDefaultXLim功能测试验证了x轴极限大到足以显示圆筒。下限需要小于-10,上限需要大于10.这些值来自helper函数中生成的图形—带有10以原点为中心的单位半径。控件中创建并保存的图将被打开setupOnce函数,查询轴限值,并验证限值是否正确。资格的功能,verifyLessThanOrEqualverifyGreaterThanOrEqual,将测试用例、实际值、期望值和在失败情况下显示的可选诊断信息作为输入。

创建testDefaultXLim函数作为本地函数axesPropertiesTest

The MathWorks, Inc.版权所有函数testDefaultXLim(testCase) xlim = testCase. testdata . axs . xlim;verifyLessThanOrEqual (testCase xlim(1), -10年,...“最小x极限不够小”) verifygreaterthanoreequal (testCase, xlim(2), 10,...“x极限不够大”结束

surfaceColorTest函数访问您创建并保存在setupOnce函数。surfaceColorTest查询圆柱体的表面颜色,并验证它是否为红色。红色的RGB值为(1 0 0).资格函数,verifyEqual,将测试用例、实际值、期望值和在失败时显示的可选诊断信息作为输入。通常在使用verifyEqual对于浮点值,可以为比较指定一个公差。有关更多信息,请参见matlab.unittest.constraints

创建surfaceColorTest函数作为本地函数axesPropertiesTest

The MathWorks, Inc.版权所有函数surfaceColorTest(testCase) h = findobj(testCase. testdata . axes,“类型”“表面”);有限公司= h.FaceColor;验证(testCase, co, [1 0 0],“FaceColor是不正确的”结束

现在,axesPropertiesTest.m完成文件主功能,文件夹具功能,新夹具功能,和两个本地测试功能。您已经准备好运行测试。

运行测试

属性运行测试,下一步是runtests函数。在本例中,对runtests结果如下步骤:

  1. main函数创建一个测试数组。

  2. 文件夹具记录工作文件夹,创建临时文件夹,将临时文件夹设置为工作文件夹,生成并保存图形。

  3. 新的夹具设置打开保存的图形并找到把手。

  4. testDefaultXLim测试运行。

  5. 新夹具拆卸合图。

  6. 新的夹具设置打开保存的图形并找到把手。

  7. surfaceColorTest测试运行。

  8. 新夹具拆卸合图。

  9. 文件夹具拆卸将删除已保存的图形,并恢复到原来的路径,并删除临时文件夹。

在命令提示符下,生成并运行测试套件。

结果= runtests (“axesPropertiesTest.m”
运行axesPropertiesTest . .Done axesPropertiesTest __________ results = 1x2 TestResult array with properties: Name Passed Failed Incomplete Duration Details总计:2 Passed, 0 Failed, 0 Incomplete. 3.1713秒测试时间。

创建测试结果表

要访问表可用的功能,请从TestResult对象。

rt =表(结果)
rt = 2 x6表名传递失败的不完整的持续时间的细节  _______________________________________ ______ ______ __________ ________ ____________ {' axesPropertiesTest / testDefaultXLim '}真假假2.4534 {1 x1 struct} {' axesPropertiesTest / surfaceColorTest '}真假假0.71789 {1 x1 struct}

将测试结果导出到Excel®电子表格中。

writetable (rt myTestResults.xls)

通过增加持续时间对测试结果进行排序。

sortrows (rt,“持续时间”
ans = 2 x6表名传递失败的不完整的持续时间的细节  _______________________________________ ______ ______ __________ ________ ____________ {' axesPropertiesTest / surfaceColorTest '}真假假0.71789 {1 x1 struct} {' axesPropertiesTest / testDefaultXLim '}真假假2.4534 {1 x1 struct}

另请参阅

|

相关的话题