主要内容

创建高级参数化测试

此示例显示如何创建参数中的测试testclasssetup.testmethodetup., 和测试方法块。示例测试类测试随机数生成。

创建teststrand测试类

在当前文件夹中的文件中,创建TestRand类来测试随机数生成的各个方面。定义用于参数化测试的属性。

classdefTestRand < matlab.unittest.TestCase特性(classsetupparameter)生成器= {“旋风”'幸福父母''multifibonacci'};结束特性(ProfetySetupParameter)种子= {0,123,4294967295};结束特性(TestParameter) dim1 = struct('小的',1,“媒介”2,'大的',3);dim2 = struct('小的'2,“媒介”,3,'大的'4);dim3 = struct('小的',3,“媒介”,4,'大的'5);类型= {'单身的''双倍的'};结束结束

在里面TestRand班级,每一班特性块对应于特定级别的参数化。类设置级参数化定义随机数生成器的类型。方法设置级参数化定义了随机数生成器的种子,测试级参数化定义了随机值的数据类型和大小。

定义测试类和测试方法设置方法

在测试类和测试方法级别定义设置方法。这些方法寄存初始随机数发生器状态。框架运行测试后,该方法还原原始状态。这ClassSetup.方法定义随机数生成器的类型,而methodSetup方法种子发电机。

classdefTestRand < matlab.unittest.TestCase特性(classsetupparameter)生成器= {“旋风”'幸福父母''multifibonacci'};结束特性(ProfetySetupParameter)种子= {0,123,4294967295};结束特性(TestParameter) dim1 = struct('小的',1,“媒介”2,'大的',3);dim2 = struct('小的'2,“媒介”,3,'大的'4);dim3 = struct('小的',3,“媒介”,4,'大的'5);类型= {'单身的''双倍的'};结束方法(testclasssetup)功能ClassSetup(testCase,Generator)orig = RNG;testcase.addteardown(@ rng,orig)rng(0,发电机)结束结束方法(TestMethodSetup)功能methodSetup(testCase,seed) origin = rng;testCase.addTeardown (@rng源自)rng(种子)结束结束结束

定义采用顺序参数组合的测试方法

定义testSizeA.中的方法方法测试ParameterCombination ='顺序'属性。

classdefTestRand < matlab.unittest.TestCase特性(classsetupparameter)生成器= {“旋风”'幸福父母''multifibonacci'};结束特性(ProfetySetupParameter)种子= {0,123,4294967295};结束特性(TestParameter) dim1 = struct('小的',1,“媒介”2,'大的',3);dim2 = struct('小的'2,“媒介”,3,'大的'4);dim3 = struct('小的',3,“媒介”,4,'大的'5);类型= {'单身的''双倍的'};结束方法(testclasssetup)功能ClassSetup(testCase,Generator)orig = RNG;testcase.addteardown(@ rng,orig)rng(0,发电机)结束结束方法(TestMethodSetup)功能methodSetup(testCase,seed) origin = rng;testCase.addTeardown (@rng源自)rng(种子)结束结束方法(测试,ParameterCombination ='顺序'功能TestSize(TestCase,DIM1,DIM2,DIM3)TestCase.verifySize(RAND(DIM1,DIM2,DIM3),[DIM1 DIM2 DIM3])结束结束结束

该方法测试每个相应的参数值的输出的大小dim1dim2, 和dim3.对于一个给定的testclasssetup.testmethodetup.参数化时,框架调用testSize方法三遍,每次一遍'小的'“媒介”, 和'大的'值。例如,要测试所有的“媒介”值,框架使用testcase.verifysize(兰特(2,3,4),[2 3 4])

用成对参数组合定义测试方法

定义testRepeatable.A.中的方法方法测试ParameterCombination =“成对”属性。

classdefTestRand < matlab.unittest.TestCase特性(classsetupparameter)生成器= {“旋风”'幸福父母''multifibonacci'};结束特性(ProfetySetupParameter)种子= {0,123,4294967295};结束特性(TestParameter) dim1 = struct('小的',1,“媒介”2,'大的',3);dim2 = struct('小的'2,“媒介”,3,'大的'4);dim3 = struct('小的',3,“媒介”,4,'大的'5);类型= {'单身的''双倍的'};结束方法(testclasssetup)功能ClassSetup(testCase,Generator)orig = RNG;testcase.addteardown(@ rng,orig)rng(0,发电机)结束结束方法(TestMethodSetup)功能methodSetup(testCase,seed) origin = rng;testCase.addTeardown (@rng源自)rng(种子)结束结束方法(测试,ParameterCombination ='顺序'功能TestSize(TestCase,DIM1,DIM2,DIM3)TestCase.verifySize(RAND(DIM1,DIM2,DIM3),[DIM1 DIM2 DIM3])结束结束方法(测试,ParameterCombination =“成对”功能testReveatable(TestCase,DIM1,DIM2,DIM3)状态= RNG;firstrun = rand(dim1,dim2,dim3);RNG(州)第二run = rand(DIM1,DIM2,DIM3);testcase.verifyequal(firstrun,secondrun)结束结束结束

该方法验证了随机数生成器的结果是可重复的。对于一个给定的testclasssetup.testmethodetup.参数化时,框架调用testRepeatable.方法10次以确保使用每对一对参数值进行测试dim1dim2, 和dim3.如果参数组合详尽,则框架将调用该方法3³= 27次。

用详尽的参数组合定义测试方法

定义testClassA.中的方法方法测试属性。因为ParameterComination.属性未指定,参数组合默认为穷举。

classdefTestRand < matlab.unittest.TestCase特性(classsetupparameter)生成器= {“旋风”'幸福父母''multifibonacci'};结束特性(ProfetySetupParameter)种子= {0,123,4294967295};结束特性(TestParameter) dim1 = struct('小的',1,“媒介”2,'大的',3);dim2 = struct('小的'2,“媒介”,3,'大的'4);dim3 = struct('小的',3,“媒介”,4,'大的'5);类型= {'单身的''双倍的'};结束方法(testclasssetup)功能ClassSetup(testCase,Generator)orig = RNG;testcase.addteardown(@ rng,orig)rng(0,发电机)结束结束方法(TestMethodSetup)功能methodSetup(testCase,seed) origin = rng;testCase.addTeardown (@rng源自)rng(种子)结束结束方法(测试,ParameterCombination ='顺序'功能TestSize(TestCase,DIM1,DIM2,DIM3)TestCase.verifySize(RAND(DIM1,DIM2,DIM3),[DIM1 DIM2 DIM3])结束结束方法(测试,ParameterCombination =“成对”功能testReveatable(TestCase,DIM1,DIM2,DIM3)状态= RNG;firstrun = rand(dim1,dim2,dim3);RNG(州)第二run = rand(DIM1,DIM2,DIM3);testcase.verifyequal(firstrun,secondrun)结束结束方法(测试)功能testClass(TestCase,DIM1,DIM2,类型)TestCase.verifyClass(RAND(DIM1,DIM2,类型),类型)结束结束结束

该方法验证了输出的类兰德和预期的班级是一样的。对于一个给定的testclasssetup.testmethodetup.参数化时,框架调用testClass方法3×3×2 = 18次,以确保使用每个组合测试dim1dim2, 和类型参数值。

从测试类创建套件

在命令提示符下,从中创建一个套件TestRand类。

套房= matlab.unittest.testsuite.fromclass(?testrand)
suite = 1×279带有属性的测试数组:Name ProcedureName TestClass BaseFolder Parameterization SharedTestFixtures Tags Tests Include: 17 Unique Parameterizations, 0 SharedTestFixture Classes, 0 Tags

对于一个给定的testclasssetup.testmethodetup.参数化,框架创建3+10+18 = 31个测试元素。这31个元素分别被调用testmethodetup.参数化(导致3×31 = 93个测试元素testclasssetup.参数化)。有三个testclasssetup.参数化;因此,该套件共有3×93 = 279个测试元素。

查询第一个测试元素的名称。

套房(1).name
ans ='testrand [generator = twister] / [seed = value1] testclass(dim1 = small,dim2 = small,type =单个)'

第一个元素的名称由这些部分组成:

  • 测试类:TestRand

  • 类设置属性和参数名称:[Generator = Twister]

  • 方法设置属性和参数名称:(种子= value1)

  • 测试方法名称:testClass

  • 测试方法属性和参数名称:(dim1 = dim2 =小、类型=单)

参数名称为种子财产并不是特别有意义(value1)。测试框架提供了这个名字,因为种子属性被指定为单元格数组。对于更有意义的名称,定义种子属性作为具有描述性字段名称的结构。

运行使用选择器创建的套件

在命令提示符处,创建一个选择器来选择测试“旋风”发电机的'单身的'精度。通过省略使用属性的测试元素来创建套件'大的'参数名称。

进口matlab.unittest.selectors.HasParameters = hasparameter('财产'“发电机”“名字”“旋风”)&...有公差者('财产''类型'“名字”'单身的')&...~ HasParameter (“名字”'大的');suite2 = matlab.unittest.TestSuite.fromClass (? TestRand, s)
suite2 = 1×12带有属性的测试数组:Name ProcedureName TestClass BaseFolder Parameterization SharedTestFixtures Tags Tests Include: 9 Unique Parameterizations, 0 SharedTestFixture Classes, 0 Tags。

如果你第一次生成完整的套件TestRand类,您可以使用selectIf方法。

套房= matlab.unittest.testsuite.fromclass(?testrand);Suite2 = Selectif(套房,S);

运行过滤的测试套件。

Suite2.Run;
运行teststrand .......... ..完成TestRand  __________

从方法使用选择器运行套件

创建一个选择器,该选择器忽略使用属性的测试元素'大的'或者“媒介”参数名称。限制结果以测试元素testRepeatable.方法。

进口matlab.unittest.selectors.HasParameters =〜(哈萨克拉姆(“名字”'大的') | HasParameter (“名字”“媒介”));suite3 = matlab.unittest.testsuite.frommethod(?testrand,'testRepeatable',s);{suite3.name}'
ans = 9×1单元阵列{“TestRand[发电机=捻线机]/[种子= value1] testRepeatable (dim1 = dim2 =小dim3 =小)”}{“TestRand[发电机=捻线机]/[种子= value2] testRepeatable (dim1 = dim2 =小dim3 =小)”}{“TestRand[发电机=捻线机]/[种子= value3] testRepeatable (dim1 = dim2 =小dim3 =小)的}{“TestRand[发电机= combRecursive] /[种子= value1] testRepeatable (dim1 = dim2 =小dim3 =小)”}{“TestRand[发电机= combRecursive] /[种子= value2] testRepeatable (dim1 = dim2 =小dim3 =小)”}{“TestRand[发电机= combRecursive] /[种子= value3] testRepeatable (dim1 = dim2 =小dim3 =小)的}{“TestRand[发电机= multFibonacci] /[种子= value1] testRepeatable (dim1 = dim2 =小dim3 =小)”}{“TestRand[发电机= multFibonacci] /[种子= value2] testRepeatable (dim1 = dim2 =小dim3 =小)”}{“TestRand[发电机= multFibonacci] /[种子= value3] testRepeatable (dim1 = dim2 =小dim3 =小)的}

运行测试套件。

Suite3.Run;
运行testrand .........完成睾丸__________

运行所有双精度测试

在命令提示符处,从TestRand使用的课程'双倍的'参数名称。

runtests('testrand''parametername''双倍的');
运行TestRand  .......... .......... .......... .......... .......... .......... .......... .......... .完成TestRand  __________

另请参阅

||

相关话题