主要内容

使用Setup和Teardown函数编写测试

这个例子展示了如何使用文件fixture和新鲜fixture为两个MATLAB®图形属性编写单元测试。

创建axesPropertiesTest。m文件

创建一个包含测试图形属性的main函数的文件,其中包括两个测试函数。函数验证x-axis限制是正确的,另一个验证表面的表面颜色是正确的。

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

函数测试= axesPropertiesTest测试=功能测试(localfunctions);结束

创建文件夹具功能

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

在这个例子中,一个助手函数创建了一个简单的图形——一个红色圆柱体。在更现实的场景中,这段代码是被测试产品的一部分,计算成本很高,因此促使只创建一次图,并为每个测试函数加载结果的独立副本。然而,对于本例,您希望将此helper函数创建为的本地函数axesPropertiesTest.请注意,test数组不包括该函数,因为它的名称不是以' test '开始或结束的。

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

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

您必须为文件测试装置的设置和拆卸函数命名setupOnce而且teardownOnce,分别。这些函数只有一个输入参数testCase测试框架自动将一个功能测试用例对象传递到其中。此测试用例对象包含TestData结构,允许数据在设置、测试和删除函数之间传递。在本例中,TestData结构使用已分配的字段存储原始路径、临时文件夹名称和图形文件名。

将设置和拆卸函数创建为的本地函数axesPropertiesTest

函数setupOnce (testCase)创建并更改为临时文件夹testCase.TestData.origPath = pwd;testCase.TestData.tmpFolder =“tmpFolder”+...字符串(datetime (“现在”“格式”“名称不'HHmmss”));mkdir (testCase.TestData.tmpFolder) cd (testCase.TestData.tmpFolder)创建并保存图形testCase.TestData.figName =“tmpFig.fig”;aFig = createFigure;saveas (aFig testCase.TestData.figName)关闭(aFig)结束函数teardownOnce(testCase) delete(testCase. testdata . figname) cd(testCase. testdata . origpath) rmdir(testCase. testdata . tmpfolder)结束

创建新夹具功能

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

必须命名新的夹具函数设置而且拆卸,分别。与文件fixture函数类似,这些函数采用单个输入参数testCase.在本例中,这些函数在TestData结构,该结构包括图形和轴的句柄。这允许信息在设置、测试和删除函数之间传递。

将设置和拆卸函数创建为的本地函数axesPropertiesTest.为每个测试打开保存的图,以确保测试的独立性。

函数setup(testCase) testCase. testdata . figure = openfig(testCase. testdata . figname);testCase.TestData.Axes = findobj(testCase.TestData.Figure...“类型”“轴”);结束函数拆卸(testCase)关闭(testCase.TestData.Figure)结束

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

创建测试函数

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

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

创建testDefaultXLim函数的局部函数axesPropertiesTest

函数testDefaultXLim(testCase) xlim = testCase. testdata . axes . xlim;verifyLessThanOrEqual (testCase xlim(1), -10年,...“最小x限制不够小”) verifyGreaterThanOrEqual (testCase xlim(2), 10日...“最大x限制不够大”结束

surfaceColorTest方法中创建并保存的图形setupOnce函数。surfaceColorTest查询圆柱体的表面颜色,并验证它是否为红色。红色的RGB值为[10 0 0].限定函数verifyEqual将测试用例、实际值、期望值以及在失败情况下显示的可选诊断信息作为输入。通常在使用verifyEqual对于浮点值,可以指定比较的容差。有关更多信息,请参见matlab.unittest.constraints

创建surfaceColorTest函数的局部函数axesPropertiesTest

函数surfaceColorTest(testCase) h = findobj(testCase. testdata . axes,“类型”“表面”);co = h.FaceColor;verifyEqual(testCase,co,[1 0 0],“肤色不正确”结束

现在,axesPropertiesTest.m文件包含一个主函数、一个辅助函数、文件夹具函数、新鲜夹具函数和两个测试函数。您已经准备好运行测试。

运行测试

方法运行测试runtests函数。在本例中,调用runtests结果如下步骤:

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

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

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

  4. testDefaultXLim测试运行。

  5. 新夹具拆卸关闭图形。

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

  7. surfaceColorTest测试运行。

  8. 新夹具拆卸关闭图形。

  9. 文件fixture拆卸将删除保存的图形,更改回原始路径,并删除临时文件夹。

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

结果=运行测试(“axesPropertiesTest.m”
运行axesPropertiesTest ..Done axesPropertiesTest __________
results = 1×2带有属性的TestResult数组:名称通过失败不完整持续时间详细信息总计:2通过,0失败,0不完整。0.5124秒测试时间。

创建测试结果表

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

Rt =表(结果)
rt =2×6表名字传递失败的不完整的持续时间的细节  _______________________________________ ______ ______ __________ ________ ____________ {' axesPropertiesTest / testDefaultXLim '}真假假0.35239{1×1 struct} {' axesPropertiesTest / surfaceColorTest '}真假假0.16001{1×1 struct}

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

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

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

writetable (rt,“myTestResults.xls”

另请参阅

|

相关的话题