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 中的任一比较器,则满足该比较器。
输入参量
用于比较表变量中包含的值的比较器,指定为由 matlab.unittest.constraints 命名空间中分类为比较器的类组成的对象数组。
示例: matlab.unittest.constraints.NumericComparator
示例: matlab.unittest.constraints.StringComparator("IgnoringCase",true)
示例: [matlab.unittest.constraints.LogicalComparator matlab.unittest.constraints.NumericComparator]
是否为以递归方式运算,指定为数值或逻辑值 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}
VariableTypes: [1×0 string]
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}
VariableTypes: [1×0 string]
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'}
VariableTypes: ["double" "double" "double" "double"]
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'}
VariableTypes: ["double" "double" "double" "double"]
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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)