Main Content

matlab.unittest.constraints.ObjectComparator 类

命名空间: matlab.unittest.constraints

用于比较 MATLABJava 对象数组的比较器

描述

matlab.unittest.constraints.ObjectComparator 类提供用于比较 MATLAB® 或 Java® 对象数组的比较器。要在测试中使用此比较器,请创建一个 ObjectComparator 实例,并将其指定为 IsEqualTo 约束构造函数的 Using 名称-值参量的值。

创建对象

描述

示例

c = matlab.unittest.constraints.ObjectComparator 创建比较器来比较 MATLAB 或 Java 对象数组。如果实际值和预期值是相同类和大小的对象数组,并且所有属性的值都相等,则满足该比较器。如果无法确定是否相等,比较器将调用 isequalnisequal。(如果预期值的类定义 isequaln 方法,则比较器调用 isequaln。否则,它调用 isequal。)如果调用返回 true,则满足该比较器。

示例

c = matlab.unittest.constraints.ObjectComparator("Within",tol) 在比较中使用指定的容差。使用此语法时,比较器首先检查是否相等,如上所述。如果检查通过,则满足该比较器。否则,比较器将检查实际值和预期值的类、大小和稀疏性是否相等。如果这些检查中的任一项失败,则不满足该比较器。如果它们通过,比较器将比较委托给 tol

输入参量

全部展开

容差,指定为 matlab.unittest.constraints.Tolerance 对象。

此参量设置 Tolerance 属性。

示例: matlab.unittest.constraints.AbsoluteTolerance(MyInt(1))

属性

全部展开

容差,以 matlab.unittest.constraints.Tolerance 对象形式返回。

此属性由 tol 输入参量设置。

属性:

GetAccess
public
SetAccess
private

示例

全部折叠

使用 ObjectComparator 类比较实际值和预期值。

在当前文件夹中名为 MyInt.m 的文件中,创建 int8 类的一个子类。

classdef MyInt < int8
    methods
        function obj = MyInt(value)
            obj = obj@int8(value);
        end
    end
end

导入此示例中使用的类。

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.ObjectComparator
import matlab.unittest.constraints.AbsoluteTolerance

创建一个供交互测试的测试用例。

testCase = TestCase.forInteractiveUse;

使用 ObjectComparator 实例来比较用相同输入值构造的两个 MyInt 对象。测试通过。

testCase.verifyThat(MyInt(10),IsEqualTo(MyInt(10), ...
    "Using",ObjectComparator))
Verification passed.

比较用不同输入值构造的两个 MyInt 对象。测试失败。

testCase.verifyThat(MyInt(11),IsEqualTo(MyInt(10), ...
    "Using",ObjectComparator))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> ObjectComparator failed.
        --> The objects are not equal using "isequaln".
        
        Actual Value:
          MyInt:
        
          int8 data:
           11
        Expected Value:
          MyInt:
        
          int8 data:
           10
    ------------------
    Stack Information:
    ------------------
    In C:\work\CompareValuesUsingObjectComparatorExample.m (CompareValuesUsingObjectComparatorExample) at 30

要使该测试通过,请指定值必须在 1 的绝对容差范围内相等。该容差的值必须是与实际值和预期值相同的类。

testCase.verifyThat(MyInt(11),IsEqualTo(MyInt(10), ...
    "Using", ObjectComparator("Within",AbsoluteTolerance(MyInt(1)))))
Verification passed.

提示

  • 在大多数情况下,您不需要使用 ObjectComparator 实例。IsEqualTo 类创建一个约束来测试各种数据类型的相等性,包括 MATLAB 和 Java 对象数组。

    当需要覆盖由 IsEqualTo 类执行的比较时,请使用 ObjectComparator 实例。例如,如果希望在实际值和预期值不是 MATLAB 对象数组时比较失败,请在测试中包含 ObjectComparator 实例。您还可以使用 ObjectComparator 来限制元胞数组、结构体、字典、表和 MATLAB 对象数组的公共属性中包含的值。在此示例中,MATLAB 会引发错误,因为实际值和预期值为数值标量。

    import matlab.unittest.TestCase
    import matlab.unittest.constraints.IsEqualTo
    import matlab.unittest.constraints.ObjectComparator
    
    testCase = TestCase.forInteractiveUse;
    exp = 5; 
    act = exp;
    testCase.verifyThat(act,IsEqualTo(exp,"Using",ObjectComparator))
    

版本历史记录

在 R2013a 中推出