matlab.unittest.constraints.IsEqualTo 类
包: matlab.unittest.constraints
超类: matlab.unittest.constraints.BooleanConstraint
测试相等性的约束
描述
matlab.unittest.constraints.IsEqualTo
类提供一个测试值的相等性的约束。比较详细信息取决于预期值的类。
创建对象
描述
c = matlab.unittest.constraints.IsEqualTo(
使用一个或多个名称-值参数设置其他选项。例如,expected
,Name,Value
)c = matlab.unittest.constraints.IsEqualTo(expected,"IgnoringCase",true)
创建一个不区分大小写的约束。
输入参数
expected
— 预期值
任何值
预期值,指定为任意数据类型的值。
此参数设置 Expected
属性。
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
示例: c = matlab.unittest.constraints.IsEqualTo(expected,IgnoringCase=true)
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: c = matlab.unittest.constraints.IsEqualTo(expected,"IgnoringCase",true)
IgnoringCase
— 是否忽略大小写
false
或 0
(默认) | true
或 1
比较文本值时是否忽略大小写,指定为数值或逻辑值 0
(false
) 或 1
(true
)。默认情况下,约束区分大小写。
此参数设置 IgnoreCase
属性。
IgnoringWhitespace
— 是否忽略空白
false
或 0
(默认) | true
或 1
比较文本值时是否忽略空白,指定为数值或逻辑值 0
(false
) 或 1
(true
)。默认情况下,约束区分空白字符。空白字符包括空格 (' '
)、换页符 ('\f'
)、换行符 ('\n'
)、回车符 ('\r'
)、水平制表符 ('\t'
) 和垂直制表符 ('\v'
)。
此参数设置 IgnoreWhitespace
属性。
IgnoringFields
— 比较结构体数组时要忽略的字段
字符串数组 | 字符向量元胞数组
比较结构体数组时要忽略的字段,指定为字符串数组或字符向量元胞数组。该约束不比较指定字段中的值。
此参数设置 IgnoredFields
属性。
示例: "IgnoringFields","field1"
Using
— 向其委托比较的比较器
由比较器类组成的对象向量
向其委托比较的比较器,指定为由 matlab.unittest.constraints
包中分类为比较器的类组成的对象向量。
如果比较器和 IsEqualTo
约束具有共同的名称-值参数,则传递给 IsEqualTo
的值将覆盖传递给比较器的对应值。例如,由于 IsEqualTo
构造函数中的 IgnoringCase
名称-值参数的值覆盖 StringComparator
构造函数中指定的值,此测试通过。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.StringComparator testCase = TestCase.forInteractiveUse; testCase.verifyThat("Text",IsEqualTo("text","IgnoringCase",true, ... "Using",StringComparator("IgnoringCase",false)))
此参数设置 Comparator
属性。
示例: "Using",matlab.unittest.constraints.NumericComparator
示例: "Using",matlab.unittest.constraints.PublicPropertyComparator("Recursively",true)
示例: "Using",[matlab.unittest.constraints.LogicalComparator matlab.unittest.constraints.NumericComparator]
Within
— 用于比较的容差
matlab.unittest.constraints.Tolerance
对象
用于比较的容差,指定为 matlab.unittest.constraints.Tolerance
对象。
此参数设置 Tolerance
属性。
示例: "Within",matlab.unittest.constraints.AbsoluteTolerance(1)
示例: "Within",matlab.unittest.constraints.AbsoluteTolerance(1) | matlab.unittest.constraints.RelativeTolerance(0.1)
属性
Expected
— 预期值
任何值
IgnoreCase
— 是否忽略大小写
false
或 0
(默认) | true
或 1
比较文本值时是否忽略大小写,以逻辑值 0
(false
) 或 1
(true
) 形式返回。默认情况下,约束区分大小写。
此属性由 IgnoringCase
名称-值参数设置。
属性:
GetAccess | public |
SetAccess | private |
IgnoreWhitespace
— 是否忽略空白
false
或 0
(默认) | true
或 1
比较文本值时是否忽略空白,以逻辑值 0
(false
) 或 1
(true
) 形式返回。默认情况下,约束区分空白字符。
此属性由 IgnoringWhitespace
名称-值参数设置。
属性:
GetAccess | public |
SetAccess | private |
IgnoredFields
— 比较结构体数组时要忽略的字段
字符向量元胞数组
Comparator
— 向其委托比较的比较器
比较器类的对象行向量
向其委托比较的比较器,返回为由 matlab.unittest.constraints
包中分类为比较器的类组成的对象行向量。
此属性由 Using
名称-值参数设置。
属性:
GetAccess | public |
SetAccess | private |
Tolerance
— 用于比较的容差
matlab.unittest.constraints.Tolerance
对象
用于比较的容差,以 matlab.unittest.constraints.Tolerance
对象形式返回。
此属性由 Within
名称-值参数设置。
属性:
GetAccess | public |
SetAccess | private |
示例
比较浮点数
测试浮点运算的结果。
首先,导入此示例中使用的类。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.RelativeTolerance
创建一个供交互测试的测试用例。
testCase = TestCase.forInteractiveUse;
比较 0.1*3
和 0.3
。由于浮点算术中的舍入误差,测试失败。
actual = 0.1*3; expected = 0.3; testCase.verifyThat(actual,IsEqualTo(expected))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> NumericComparator failed. --> The numeric values are not equal using "isequaln". --> Failure table: Actual Expected Error RelativeError ______ ________ ____________________ ____________________ 0.3 0.3 5.55111512312578e-17 1.85037170770859e-16 Actual Value: 0.300000000000000 Expected Value: 0.300000000000000 ------------------ Stack Information: ------------------ In C:\work\TestFloatingPointNumbersExample.m (TestFloatingPointNumbersExample) at 19
测试这些值是否在 eps
的相对容差范围内。测试通过。
testCase.verifyThat(actual,IsEqualTo(expected, ... "Within",RelativeTolerance(eps)))
Verification passed.
比较字符串
使用 IsEqualTo
约束比较文本值。
首先,导入此示例中使用的类。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo
创建一个供交互测试的测试用例。
testCase = TestCase.forInteractiveUse;
串联两个字符串并验证结果。测试通过。
actual = "Milky " + "Way"; expected = "Milky Way"; testCase.verifyThat(actual,IsEqualTo(expected))
Verification passed.
将实际值更改为 "Milky way "
。测试失败,因为实际值和预期值不再相等。
actual = "Milky way ";
testCase.verifyThat(actual,IsEqualTo(expected))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> StringComparator failed. --> The strings are not equal. Actual Value: "Milky way " Expected Value: "Milky Way" ------------------ Stack Information: ------------------ In C:\work\CompareStringsExample.m (CompareStringsExample) at 22
要使测试通过,请忽略大小写和空白字符。
testCase.verifyThat(actual,IsEqualTo(expected, ... "IgnoringCase",true,"IgnoringWhitespace",true))
Verification passed.
比较不同类型的公共属性
使用支持所有数据类型的比较器比较两个对象的公共属性。
在当前文件夹内一个名为 Student.m
的文件中创建 Student
类。该类有两个公共属性和一个私有属性。
classdef Student properties (SetAccess=immutable) Name Age end properties (Access=private) Field end methods function obj = Student(name,age,field) arguments name = ""; age = []; field = ""; end obj.Name = name; obj.Age = age; obj.Field = field; end end end
导入此示例中使用的类。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.PublicPropertyComparator
创建一个供交互测试的测试用例。
testCase = TestCase.forInteractiveUse;
创建两个 Student
对象,并使用 IsEqualTo
约束比较它们。在此示例中,因为私有属性中的值不同,测试失败。
s1 = Student("Mary Jones",20,"physics"); s2 = Student("Mary Jones",20,"biology"); testCase.verifyThat(s1,IsEqualTo(s2))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> ObjectComparator failed. --> The objects are not equal using "isequaln". Actual Value: Student with properties: Name: "Mary Jones" Age: 20 Expected Value: Student with properties: Name: "Mary Jones" Age: 20 ------------------ Stack Information: ------------------ In C:\work\ComparePublicPropertiesExample.m (ComparePublicPropertiesExample) at 29
使用 PublicPropertyComparator
实例重复该测试。由于 Name
和 Age
属性属于不同类型,请使用支持所有数据类型的比较器来执行比较。尽管 s1.Field
和 s2.Field
具有不同的值,测试仍通过,因为比较器只检查 s1
和 s2
的公共属性。
testCase.verifyThat(s1,IsEqualTo(s2, ... "Using",PublicPropertyComparator.supportingAllValues))
Verification passed.
创建一个新的 Student
对象,并将其与 s1
进行比较。测试失败,因为 s1.Name
和 s3.Name
的值不同。
s3 = Student("mary jones",20,"chemistry"); testCase.verifyThat(s1,IsEqualTo(s3, ... "Using",PublicPropertyComparator.supportingAllValues))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> Path to failure: <Value>.Name --> StringComparator failed. --> The strings are not equal. Actual Value: "Mary Jones" Expected Value: "mary jones" Actual Value: Student with properties: Name: "Mary Jones" Age: 20 Expected Value: Student with properties: Name: "mary jones" Age: 20 ------------------ Stack Information: ------------------ In C:\work\ComparePublicPropertiesExample.m (ComparePublicPropertiesExample) at 44
要使测试通过,请使用忽略大小写的比较器。
testCase.verifyThat(s1,IsEqualTo(s3, ... "Using",PublicPropertyComparator.supportingAllValues( ... "IgnoringCase",true)))
Verification passed.
您也可以指示比较器在比较期间忽略 Name
属性。
testCase.verifyThat(s1,IsEqualTo(s3, ... "Using",PublicPropertyComparator.supportingAllValues( ... "IgnoringProperties","Name")))
Verification passed.
详细信息
比较详细信息
下表描述 IsEqualTo
约束用于不同类的预期值时的行为。
预期值 | 比较详细信息 |
---|---|
逻辑数组 | 如果实际值和预期值具有相同的类、大小和稀疏性,并且它们对应的元素相等,则满足该约束。 |
数值数组 | 当不指定容差时,如果实际值和预期值具有相同的类、大小、复/实性和稀疏性,并且 当指定容差时,约束首先检查实际值和预期值的类、大小和稀疏性是否相等。如果这些检查中的任何一项失败,则不满足该约束。如果这些检查都通过,但复/实性检查或 |
字符串数组、字符数组或包含字符数组的元胞数组 | 如果实际值和预期值是具有相同的类和大小的文本值,并且它们对应的元素相等,则满足该约束。您可以将该约束设置为忽略大小写和/或空白字符。 |
元胞数组 | 如果实际值和预期值是大小相同的元胞数组,并且对应的元胞数组元素也满足约束,则满足该约束。 当比较元胞数组中包含的值时,约束以递归方式运算。递归会一直继续,直到检查了所有嵌套值的相等性为止。 |
结构体数组 | 如果实际值和预期值是具有相同大小和字段的结构体数组,并且对应字段中的值也满足约束,则满足该约束。您可以将约束设置为忽略某些字段。 当比较结构体数组中包含的值时,约束以递归方式运算。递归会一直继续,直到检查了所有嵌套值的相等性为止。 |
字典 | 如果实际值和预期值是具有相同键的字典,并且分配给对应键的值也满足约束,则表示满足该约束。 当比较字典中包含的值时,约束以递归方式运算。递归会一直继续,直到检查了所有嵌套值的相等性为止。 |
表数组 | 如果实际值和预期值是具有相同大小和属性值的表数组,并且对应的表变量也满足约束,则满足该约束。 当比较表数组中包含的值时,约束以递归方式运算。递归会一直继续,直到检查了所有嵌套值的相等性为止。 |
MATLAB® 或 Java® 对象数组 | 当不指定容差时,如果实际值和预期值是具有相同类和大小的对象数组,并且所有属性的值都相等,则满足该约束。如果无法确定是否相等,则约束调用 当指定容差时,约束首先检查对象数组是否相等,如上所述。如果检查通过,则满足该约束。否则,约束检查实际值和预期值的类、大小和稀疏性是否相等。如果这些检查中的任何一项失败,则不满足该约束。如果通过,约束将比较委托给容差。 |
版本历史记录
在 R2013a 中推出R2022b: 在测试中比较字典
您可以使用 IsEqualTo
约束来比较 MATLAB 字典。
R2019a: 始终比较表变量
IsEqualTo
约束始终比较表变量的大小和类型。例如,此测试失败,因为实际和预期表变量具有不同类型。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo testCase = TestCase.forInteractiveUse; act = table(zeros(0,2)); exp = table({}); testCase.verifyThat(act,IsEqualTo(exp))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> Path to failure: <Value>.Var1 --> CellComparator failed. --> Classes do not match. Actual Class: double Expected Class: cell Actual Value: 0×2 empty double matrix Expected Value: 0×0 empty cell array Actual Value: 0×1 empty table Expected Value: 0×1 empty table
在以前的版本中,测试通过,因为当表没有行时约束不比较表变量。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)