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)