主要内容

在创建套件时定义参数

参数化测试让你重复运行相同的测试程序,每次使用不同的数据值。在参数化测试中,这些数据值被称为参数和由参数化测试类的属性。MATLAB®使用参数化属性生成参数名称和值为每个测试运行。

在大多数情况下,MATLAB可以确定一个参数化属性的值时,加载测试类的定义。因此,您可以使用默认值初始化属性。当你用默认值初始化参数化属性,与房地产相关的参数对不同的测试运行保持不变。每次你从参数化测试类,创建一套测试框架使用相同的参数名称和值运行测试。

在某些情况下,MATLAB不能确定一个参数化属性的值时,加载测试类的定义。例如,有时一个参数化属性取决于另一个属性定义在一个更高的参数化水平。或者你可能不希望在类加载时间待定的参数。例如,如果参数代表一个文件夹中的文件,您可能需要刷新参数每次创建一套测试文件。当你不能或者不想初始化参数化属性在类加载时,初始化在套件使用静态方法的创建时间TestParameterDefinition属性。当你使用一个初始化参数化属性TestParameterDefinition方法,与房地产相关的参数可以改变不同的测试运行。换句话说,每次从参数化测试类创建一个测试套件,框架生成新的参数名称和值运行测试。

这个例子展示了如何使用参数化属性默认和默认值来验证一组类的公共属性在当前非空的文件夹。,你定义了一个参数化测试类命名PropertiesTest测试当前文件夹的子文件夹。定义三个类测试,命名ClassA,ClassB,ClassC,在当前文件夹的子文件夹。这三个类的摘要,请参阅类源文件夹

创建PropertiesTest类

测试类中定义的公共属性子文件夹,创建PropertiesTest类的测试子文件夹。这门课需要三个指定类,检索每个类的所有属性,并验证非空的。遍历类测试,参数化PropertiesTest在class-setup级别。遍历每个类的属性指定由给定class-setup-level参数,参数化PropertiesTest在测试水平。

定义属性用于参数化测试:

  • 的框架来遍历列表的类属性命名classToTest。因为这个例子假设中的类子文件夹是固定的和已知的MATLAB加载测试类定义,使用默认值初始化属性。为了指定类测试之前运行测试方法,使classToTest一个ClassSetupParameter财产。

  • 定义一个TestParameter属性命名propertyToTest可以用来遍历任何类的属性框架目前正在测试。因为它的价值取决于被测试的类,不为它分配一个默认值。相反,在套件创建时间使用初始化它TestParameterDefinition方法。

  • 存储的值不同的属性在类的实例测试,定义一个属性命名ObjectToTest

classdefPropertiesTest < matlab.unittest.TestCase属性(ClassSetupParameter) classToTest = {“ClassA”,“ClassB”,“ClassC”};结束属性(TestParameter) propertyToTest结束属性ObjectToTest结束结束

定义方法来初始化测试水平参数化属性

PropertiesTest类,propertyToTest为每个被测试类有不同的价值。因此,您不能指定一个默认值。相反,您必须在套件创建时初始化它。要实现这个需求,添加一个TestParameterDefinition方法命名initializeProperty。因为一个TestParameterDefinition方法必须是静态的,使用组合方法的属性TestParameterDefinition,静态定义方法。

initializeProperty方法接受class-setup-level参数化属性作为输入,并使用调用属性函数返回属性名称的单元阵列特征向量。

classdefPropertiesTest < matlab.unittest.TestCase属性(ClassSetupParameter) classToTest = {“ClassA”,“ClassB”,“ClassC”};结束属性(TestParameter) propertyToTest结束属性ObjectToTest结束方法(静态TestParameterDefinition)函数propertyToTest = initializeProperty (classToTest) propertyToTest =属性(classToTest);结束结束结束

initializeProperty方法,输入参数classToTest和输出参数propertyToTest参数化属性中定义的吗PropertiesTest类。任何时候你定义一个TestParameterDefinition方法,所有输入方法必须匹配参数化属性定义在相同的类或者它的一个超类。此外,所有方法的输出必须匹配参数化属性定义在相同的类。

initializeProperty方法,输入参数classToTest在参数化最高级别定义。这使得它高于输出参数propertyToTest,这是定义在参数化水平最低。任何时候你定义一个TestParameterDefinition方法,该方法接受输入,输入必须在更高的参数化水平相对于输出的方法。对参数化水平的更多信息,请参阅在基于类的测试中使用的参数

定义测试类的设置方法

为非空的属性值测试,您必须首先创建一个对象类的测试,这样你就可以获取属性值。要实现这个需求,添加参数化classSetup方法PropertiesTest类。为了运行任何之前准备好对象测试方法,使classSetup一个TestClassSetup方法。

classSetup被测试方法创建类的实例并将其存储在ObjectToTest财产。测试可以稍后检索的属性值ObjectToTest。在这个例子中,通过调用框架运行测试classSetup3乘以1时间为每个方法ClassA,ClassB,ClassC

classdefPropertiesTest < matlab.unittest.TestCase属性(ClassSetupParameter) classToTest = {“ClassA”,“ClassB”,“ClassC”};结束属性(TestParameter) propertyToTest结束属性ObjectToTest结束方法(静态TestParameterDefinition)函数propertyToTest = initializeProperty (classToTest) propertyToTest =属性(classToTest);结束结束方法(TestClassSetup)函数classSetup (testCase, classToTest)构造函数= str2func (classToTest);testCase。ObjectToTest =构造函数();结束结束结束

测试非空的属性值

测试的属性ObjectToTest添加一个,非空的吗测试方法命名testProperty。为了使迭代方法的属性ObjectToTest,使参数化方法,并通过它propertyToTest

在每个测试,testProperty方法检索属性的值ObjectToTest。然后,它使用一个调用verifyNotEmpty资格的方法验证值不为空。对于一个给定的class-setup-level参数化,框架调用testProperty一旦每个属性的类被测试。

classdefPropertiesTest < matlab.unittest.TestCase属性(ClassSetupParameter) classToTest = {“ClassA”,“ClassB”,“ClassC”};结束属性(TestParameter) propertyToTest结束属性ObjectToTest结束方法(静态TestParameterDefinition)函数propertyToTest = initializeProperty (classToTest) propertyToTest =属性(classToTest);结束结束方法(TestClassSetup)函数classSetup (testCase, classToTest)构造函数= str2func (classToTest);testCase。ObjectToTest =构造函数();结束结束方法(测试)函数testProperty (testCase, propertyToTest)值= testCase.ObjectToTest。(propertyToTest);testCase.verifyNotEmpty(值)结束结束结束

创建参数化测试和运行测试套件

现在PropertiesTest类定义完成后,您可以创建一个参数化测试套件并运行测试。要做到这一点,确保测试子文件夹的路径。

目录“源”,“测试”)

创建的一套PropertiesTest类。

套件= testsuite (“PropertiesTest”);

测试套件包括八个元素。每个元素对应一个属性中定义子文件夹。返回第一个套件元素的名称。

套房(1). name
ans = ' PropertiesTest [classToTest = ClassA] / testProperty (propertyToTest = PropA1)”

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

  • PropertiesTest——测试类的名称

  • [classToTest = ClassA]——Class-setup-level属性和参数名称

  • testProperty- - - - - -测试方法名称

  • (propertyToTest = PropA1)——测试水平属性和参数名称

运行测试。因为两个属性文件夹是空的,两个测试失败。

suite.run
运行PropertiesTest . .= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =验证失败PropertiesTest [classToTest = ClassA] / testProperty (propertyToTest = PropA3)。- - - - - - - - - - - - - - - - - - - - - - - -框架诊断:- - - - - - - - - - - - - - - - - - - - - - - - verifyNotEmpty失败了。- - >的值不能是空的。- - >的值的大小[0 0]。实际价值:[]- - - - - - - - - - - - - - - - - -堆栈信息:- - - - - - - - - - - - - - - - - -在C: \ TEMP \ \ matlab-ex41465327 \ \ PropertiesTest测试例子。在30米(PropertiesTest.testProperty) = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ....= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =验证失败PropertiesTest [classToTest = ClassC] / testProperty (propertyToTest = PropC1)。- - - - - - - - - - - - - - - - - - - - - - - -框架诊断:- - - - - - - - - - - - - - - - - - - - - - - - verifyNotEmpty失败了。- - >的值不能是空的。- - >的值的大小[0 0]。 Actual Value: [] ------------------ Stack Information: ------------------ In C:\TEMP\Examples\matlab-ex41465327\test\PropertiesTest.m (PropertiesTest.testProperty) at 30 ================================================================================ .. Done PropertiesTest __________ Failure Summary: Name Failed Incomplete Reason(s) ===================================================================================================================== PropertiesTest[classToTest=ClassA]/testProperty(propertyToTest=PropA3) X Failed by verification. --------------------------------------------------------------------------------------------------------------------- PropertiesTest[classToTest=ClassC]/testProperty(propertyToTest=PropC1) X Failed by verification.
ans = 1×8 TestResult数组属性:名称传递失败的不完整的时间细节总数:6通过,2失败(运行),0不完整,测试时间0.2348秒。

运行测试的特定类

只运行测试ClassB。要做到这一点,使用selectIf的方法matlab.unittest.TestSuite类选择测试套件的元素使用一个特定的参数化。生成的测试套件过滤套件只有三个要素。

suite2 = suite.selectIf (“ParameterName”,“PropB *”);{suite2.Name}’
ans =3×1细胞{“PropertiesTest [classToTest = ClassB] / testProperty (propertyToTest = PropB1)} {“PropertiesTest [classToTest = ClassB] / testProperty (propertyToTest = PropB2)} {“PropertiesTest [classToTest = ClassB] / testProperty (propertyToTest = PropB3)}

过滤套件运行。

suite2.run;
运行PropertiesTest……完成PropertiesTest __________

另外,您可以通过创建一个选择器,用于过滤运行相同的测试参数的测试套件。

进口matlab.unittest.selectors.HasParameter进口matlab.unittest.constraints.StartsWithSubstringsuite3 = matlab.unittest.TestSuite.fromClass (? PropertiesTest,HasParameter (“名称”StartsWithSubstring (“PropB”)));suite3.run;
运行PropertiesTest……完成PropertiesTest __________

类源文件夹

本节提供的类的内容子文件夹。

ClassA有三个属性。两个非空的值的属性。

classdefClassA属性PropA1 = 1;PropA2 = 2;PropA3结束结束

ClassB有三个属性。它的所有属性都有非空的值。

classdefClassB属性PropB1 = 1;PropB2 = 2;PropB3 =“一个”;结束结束

ClassC有两个属性。它的一个属性有一个非空的值。

classdefClassC属性PropC1 PropC2 = (1 2 3);结束结束

另请参阅

||

相关的话题