matlab.unittest.constraints.TableComparator 类
命名空间: matlab.unittest.constraints
表数组的比较器
描述
matlab.unittest.constraints.TableComparator
类提供用于比较 MATLAB® 表数组的比较器。要在测试中使用此比较器,请创建一个 TableComparator
实例,并将其指定为 IsEqualTo
约束构造函数的 Using
名称-值参量的值。
创建对象
描述
c = matlab.unittest.constraints.TableComparator
创建一个用于比较空表数组的比较器。如果实际值和预期值是具有相同大小和属性值的空表数组,则满足该比较器。
c = matlab.unittest.constraints.TableComparator(
使用指定的比较器 comp
)comp
来比较表数组中包含的值。使用此语法时,如果实际值和预期值是具有相同大小和属性值的表数组,并且对应的表变量满足 comp
中的任一比较器,则满足该比较器。
输入参量
comp
— 用于比较表变量中的值的比较器
比较器类的对象数组
用于比较表变量中包含的值的比较器,指定为由 matlab.unittest.constraints
命名空间中分类为比较器的类组成的对象数组。
示例: matlab.unittest.constraints.NumericComparator
示例: matlab.unittest.constraints.StringComparator("IgnoringCase",true)
示例: [matlab.unittest.constraints.LogicalComparator matlab.unittest.constraints.NumericComparator]
tf
— 是否以递归方式运算
false
或 0
(默认) | true
或 1
是否为以递归方式运算,指定为数值或逻辑值 0
(false
) 或 1
(true
)。
当值为 true
时,实际和预期表数组的变量也可以是表数组,并且比较器将以递归方式比较这些变量。当值为 false
时,实际和预期表数组的所有变量必须具有 comp
支持的类型。例如,在以下代码中,c1
和 c2
都可以比较由数值组成的表数组。但是,只有 c2
可以比较包含表数组或数值作为变量的表数组。
import matlab.unittest.constraints.TableComparator import matlab.unittest.constraints.NumericComparator c1 = TableComparator(NumericComparator); c2 = TableComparator(NumericComparator,"Recursively",true);
此参量设置 Recursive
属性。
属性
示例
比较空表
使用 TableComparator
类比较空表。
首先,导入此示例中使用的类。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.TableComparator
创建一个供交互测试的测试用例。
testCase = TestCase.forInteractiveUse;
使用 TableComparator
实例来比较两个空表。验证 table
和 table.empty
生成相同的空表。
testCase.verifyThat(table,IsEqualTo(table.empty,"Using",TableComparator))
Verification passed.
测试具有不同属性值的两个空表是否相等。测试失败。
T1 = table; T1.Properties.Description = "First Empty Table"; T2 = table; T2.Properties.Description = "Second Empty Table"; testCase.verifyThat(T1,IsEqualTo(T2,"Using",TableComparator))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> TableComparator failed. --> Table properties do not match. Path to failure: <table>.Properties --> ObjectComparator failed. --> The objects are not equal using "isequaln". Actual Value: TableProperties with properties: Description: 'First Empty Table' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {1×0 cell} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties. Expected Value: TableProperties with properties: Description: 'Second Empty Table' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {1×0 cell} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties. Actual Value: 0×0 empty table Expected Value: 0×0 empty table ------------------ Stack Information: ------------------ In C:\work\CompareEmptyTablesExample.m (CompareEmptyTablesExample) at 25
比较非空表
使用 TableComparator
类比较包含非空变量的表。
首先,导入此示例中使用的类。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.TableComparator import matlab.unittest.constraints.NumericComparator import matlab.unittest.constraints.AbsoluteTolerance
创建一个供交互测试的测试用例。
testCase = TestCase.forInteractiveUse;
创建其变量包含数值的两个表。
LastName = ["Lin";"Jones";"Brown"]; Age = [38;40;49]; Height = [64;67;64]; Weight = [131;133;119]; BloodPressure = [125 83; 117 75; 122 80]; T1 = table(Age,Height,Weight,BloodPressure); T2 = table(Age,Height,Weight,BloodPressure,'RowNames',LastName);
使用 TableComparator
实例来比较这些表。要比较非空表,请将合适的比较器传递给 TableComparator
构造函数。
testCase.verifyThat(T1,IsEqualTo(T2, ... "Using",TableComparator(NumericComparator)))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> TableComparator failed. --> Table properties do not match. Path to failure: <table>.Properties --> ObjectComparator failed. --> The objects are not equal using "isequaln". Actual Value: TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'Age' 'Height' 'Weight' 'BloodPressure'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties. Expected Value: TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'Age' 'Height' 'Weight' 'BloodPressure'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {3×1 cell} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties. Actual Value: 3×4 table Age Height Weight BloodPressure ___ ______ ______ _____________ 38 64 131 125 83 40 67 133 117 75 49 64 119 122 80 Expected Value: 3×4 table Age Height Weight BloodPressure ___ ______ ______ _____________ Lin 38 64 131 125 83 Jones 40 67 133 117 75 Brown 49 64 119 122 80 ------------------ Stack Information: ------------------ In C:\work\CompareNonemptyTablesExample.m (CompareNonemptyTablesExample) at 30
尽管表变量包含相同的数值数据,测试仍失败,因为 T1
和 T2
的 RowNames
属性具有不同值。要通过该测试,请设置 T1
的 RowNames
属性。
T1.Properties.RowNames = LastName; testCase.verifyThat(T1,IsEqualTo(T2, ... "Using",TableComparator(NumericComparator)))
Verification passed.
更改 T2
中的一个值,然后重新比较这些表。测试失败。
T2.Age(end) = 50; testCase.verifyThat(T1,IsEqualTo(T2, ... "Using",TableComparator(NumericComparator)))
Verification failed. --------------------- Framework Diagnostic: --------------------- IsEqualTo failed. --> Path to failure: <Value>.Age --> NumericComparator failed. --> The numeric values are not equal using "isequaln". --> Failure table: Index Actual Expected Error RelativeError _____ ______ ________ _____ _____________ 3 49 50 -1 -0.02 Actual Value: 38 40 49 Expected Value: 38 40 50 Actual Value: 3×4 table Age Height Weight BloodPressure ___ ______ ______ _____________ Lin 38 64 131 125 83 Jones 40 67 133 117 75 Brown 49 64 119 122 80 Expected Value: 3×4 table Age Height Weight BloodPressure ___ ______ ______ _____________ Lin 38 64 131 125 83 Jones 40 67 133 117 75 Brown 50 64 119 122 80 ------------------ Stack Information: ------------------ In C:\work\CompareNonemptyTablesExample.m (CompareNonemptyTablesExample) at 43
指定表变量中的对应值必须在绝对容差 1 的范围内相等。测试通过。
testCase.verifyThat(T1,IsEqualTo(T2, ... "Using",TableComparator( ... NumericComparator("Within",AbsoluteTolerance(1)))))
Verification passed.
修改表以包含嵌套表。要比较修改后的表,请指示 TableComparator
以递归方式运算。测试通过。
T1.BloodPressure = table([125;117;122],[83;75;80]); T2 = T1; testCase.verifyThat(T1,IsEqualTo(T2, ... "Using",TableComparator(NumericComparator,"Recursively",true)))
Verification passed.
提示
在大多数情况下,您不需要使用
TableComparator
实例。IsEqualTo
类创建一个约束来测试各种数据类型的相等性,包括表数组。当需要覆盖由
IsEqualTo
类执行的比较时,请使用TableComparator
实例。例如,如果希望在表数组包含非数值时比较失败,请在测试中包含TableComparator
实例。在此示例中,MATLAB 会引发错误,因为实际表和预期表包含非数值。import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.TableComparator import matlab.unittest.constraints.NumericComparator testCase = TestCase.forInteractiveUse; exp = table([45;32;34],logical([1;0;0]),'VariableNames',["Age" "Vote"]); act = exp; testCase.verifyThat(act,IsEqualTo(exp,"Using",TableComparator(NumericComparator)))
版本历史记录
在 R2017a 中推出
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)