Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

matlab.unittest.constraints.CellComparator 类

命名空间: matlab.unittest.constraints

元胞数组的比较器

描述

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

创建对象

描述

示例

c = matlab.unittest.constraints.CellComparator 为空元胞数组创建一个比较器。如果实际值和预期值是大小相同的空元胞数组,则满足比较器。

示例

c = matlab.unittest.constraints.CellComparator(comp) 使用指定的比较器 comp 来比较元胞数组中包含的值。使用此语法时,如果实际值和预期值是大小相同的元胞数组,并且对应的元胞数组元素满足 comp 中的任一比较器,则满足该比较器。

示例

c = matlab.unittest.constraints.CellComparator(___,"Recursively",tf) 还指定在比较元胞数组中包含的值时是否以递归方式运算。如果 tftrue,则递归继续执行,直到检查了所有嵌套值的相等性。您可以将此语法与上述语法中的任何输入参数结合使用。

输入参数

全部展开

用于比较元胞数组中包含的值的比较器,指定为由 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 支持的类型。例如,在以下代码中,c1c2 都可以比较数值元胞数组。但是,只有 c2 可以比较包含元胞数组或数值作为其元素的元胞数组。

import matlab.unittest.constraints.CellComparator
import matlab.unittest.constraints.NumericComparator

c1 = CellComparator(NumericComparator);
c2 = CellComparator(NumericComparator,"Recursively",true);

此参数设置 Recursive 属性。

属性

全部展开

是否为以递归方式运算,返回为逻辑值 0 (false) 或 1 (true)。

此属性由 tf 输入参数设置。

属性:

GetAccess
public
SetAccess
private

示例

全部折叠

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

首先,导入此示例中使用的类。

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.CellComparator
import matlab.unittest.constraints.NumericComparator
import matlab.unittest.constraints.AbsoluteTolerance

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

testCase = TestCase.forInteractiveUse;

使用 CellComparator 实例来比较两个空元胞数组。测试失败,因为大小不匹配。

testCase.verifyThat({},IsEqualTo(cell(0,2),"Using",CellComparator))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> CellComparator failed.
        --> Sizes do not match.
            
            Actual size:
                 0     0
            Expected size:
                 0     2
        
        Actual Value:
          0×0 empty cell array
        Expected Value:
          0×2 empty cell array
    ------------------
    Stack Information:
    ------------------
    In C:\work\CompareValuesUsingCellComparatorExample.m (CompareValuesUsingCellComparatorExample) at 19

要比较非空元胞数组,请将适当的比较器传递给 CellComparator 构造函数。例如,将数值的元胞数组与其自身进行比较。测试通过。

testCase.verifyThat({1,2,4},IsEqualTo({1,2,4}, ...
    "Using",CellComparator(NumericComparator)))
Verification passed.

比较 {1,2,3}{1,2,4}。要通过该测试,请指定对应的元素必须在 1 的绝对容差范围内相等。

testCase.verifyThat({1,2,3},IsEqualTo({1,2,4}, ...
    "Using",CellComparator(NumericComparator( ...
    "Within",AbsoluteTolerance(1)))))
Verification passed.

通过指示比较器以递归方式运算来比较嵌套的数值元胞数组。测试失败,因为嵌套的元胞数组不同。

testCase.verifyThat({1,2,{4,8}},IsEqualTo({1,2,{4,16}}, ...
    "Using",CellComparator(NumericComparator,"Recursively",true)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> Path to failure: <Value>{3}{2}
        --> NumericComparator failed.
            --> The numeric values are not equal using "isequaln".
            --> Failure table:
                    Actual    Expected    Error    RelativeError
                    ______    ________    _____    _____________
                                                                
                      8          16        -8          -0.5     
            
            Actual Value:
                 8
            Expected Value:
                16
    
    Actual Value:
      1×3 cell array
    
        {[1]}    {[2]}    {1×2 cell}
    Expected Value:
      1×3 cell array
    
        {[1]}    {[2]}    {1×2 cell}
    ------------------
    Stack Information:
    ------------------
    In C:\work\CompareValuesUsingCellComparatorExample.m (CompareValuesUsingCellComparatorExample) at 36

提示

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

    当需要覆盖由 IsEqualTo 类执行的比较时,请使用 CellComparator 实例。例如,如果希望在元胞数组包含非数值时比较失败,请在测试中包含 CellComparator 实例。在此示例中,MATLAB® 引发错误,因为实际和预期元胞数组包含非数值。

    import matlab.unittest.TestCase
    import matlab.unittest.constraints.IsEqualTo
    import matlab.unittest.constraints.CellComparator
    import matlab.unittest.constraints.NumericComparator
    
    testCase = TestCase.forInteractiveUse;
    exp = {1,2,{3},'abc'}; 
    act = exp;
    testCase.verifyThat(act,IsEqualTo(exp,"Using",CellComparator(NumericComparator)))
    

版本历史记录

在 R2013a 中推出