Main Content

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

matlab.unittest.constraints.IsEqualTo 类

命名空间: matlab.unittest.constraints
超类: matlab.unittest.constraints.BooleanConstraint

测试相等性的约束

描述

matlab.unittest.constraints.IsEqualTo 类提供一个测试值的相等性的约束。比较详细信息取决于预期值的类。

创建对象

描述

示例

c = matlab.unittest.constraints.IsEqualTo(expected) 创建一个约束来测试预期值的相等性。

示例

c = matlab.unittest.constraints.IsEqualTo(expected,Name,Value) 使用一个或多个名称-值参数设置其他选项。例如,c = matlab.unittest.constraints.IsEqualTo(expected,"IgnoringCase",true) 创建一个不区分大小写的约束。

输入参数

全部展开

预期值,指定为任意数据类型的值。

此参数设置 Expected 属性。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

示例: c = matlab.unittest.constraints.IsEqualTo(expected,IgnoringCase=true)

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: c = matlab.unittest.constraints.IsEqualTo(expected,"IgnoringCase",true)

比较文本值时是否忽略大小写,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,约束区分大小写。

此参数设置 IgnoreCase 属性。

比较文本值时是否忽略空白,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,约束区分空白字符。空白字符包括空格 (' ')、换页符 ('\f')、换行符 ('\n')、回车符 ('\r')、水平制表符 ('\t') 和垂直制表符 ('\v')。

此参数设置 IgnoreWhitespace 属性。

比较结构体数组时要忽略的字段,指定为字符串数组或字符向量元胞数组。该约束不比较指定字段中的值。

此参数设置 IgnoredFields 属性。

示例: "IgnoringFields","field1"

向其委托比较的比较器,指定为由 matlab.unittest.constraints 包中分类为比较器的类组成的对象向量。

如果比较器和 IsEqualTo 约束具有共同的名称-值参数,则传递给 IsEqualTo 的值将覆盖传递给比较器的对应值。例如,由于 IsEqualTo 构造函数中的 IgnoringCase 名称-值参数的值覆盖 StringComparator 构造函数中指定的值,此测试通过。

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.StringComparator

testCase = TestCase.forInteractiveUse;
testCase.verifyThat("Text",IsEqualTo("text","IgnoringCase",true, ...
    "Using",StringComparator("IgnoringCase",false)))

此参数设置 Comparator 属性。

示例: "Using",matlab.unittest.constraints.NumericComparator

示例: "Using",matlab.unittest.constraints.PublicPropertyComparator("Recursively",true)

示例: "Using",[matlab.unittest.constraints.LogicalComparator matlab.unittest.constraints.NumericComparator]

用于比较的容差,指定为 matlab.unittest.constraints.Tolerance 对象。

此参数设置 Tolerance 属性。

示例: "Within",matlab.unittest.constraints.AbsoluteTolerance(1)

示例: "Within",matlab.unittest.constraints.AbsoluteTolerance(1) | matlab.unittest.constraints.RelativeTolerance(0.1)

属性

全部展开

预期值,以任何数据类型的值形式返回。

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

属性:

GetAccess
public
SetAccess
immutable

比较文本值时是否忽略大小写,以逻辑值 0 (false) 或 1 (true) 形式返回。默认情况下,约束区分大小写。

此属性由 IgnoringCase 名称-值参数设置。

属性:

GetAccess
public
SetAccess
private

比较文本值时是否忽略空白,以逻辑值 0 (false) 或 1 (true) 形式返回。默认情况下,约束区分空白字符。

此属性由 IgnoringWhitespace 名称-值参数设置。

属性:

GetAccess
public
SetAccess
private

比较结构体数组时要忽略的字段,以字符向量元胞数组形式返回。

此属性由 IgnoringFields 名称-值参数设置。

属性:

GetAccess
public
SetAccess
private

向其委托比较的比较器,返回为由 matlab.unittest.constraints 包中分类为比较器的类组成的对象行向量。

此属性由 Using 名称-值参数设置。

属性:

GetAccess
public
SetAccess
private

用于比较的容差,以 matlab.unittest.constraints.Tolerance 对象形式返回。

此属性由 Within 名称-值参数设置。

属性:

GetAccess
public
SetAccess
private

示例

全部折叠

测试浮点运算的结果。

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.RelativeTolerance

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

testCase = TestCase.forInteractiveUse;

比较 0.1*30.3。由于浮点算术中的舍入误差,测试失败。

actual = 0.1*3;
expected = 0.3;
testCase.verifyThat(actual,IsEqualTo(expected))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> Failure table:
                Actual    Expected           Error               RelativeError    
                ______    ________    ____________________    ____________________
                                                                                  
                 0.3        0.3       5.55111512312578e-17    1.85037170770859e-16
        
        Actual Value:
           0.300000000000000
        Expected Value:
           0.300000000000000
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestFloatingPointNumbersExample.m (TestFloatingPointNumbersExample) at 19

测试这些值是否在 eps 的相对容差范围内。测试通过。

testCase.verifyThat(actual,IsEqualTo(expected, ...
    "Within",RelativeTolerance(eps)))
Verification passed.

使用 IsEqualTo 约束比较文本值。

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo

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

testCase = TestCase.forInteractiveUse;

串联两个字符串并验证结果。测试通过。

actual = "Milky " + "Way";
expected = "Milky Way";
testCase.verifyThat(actual,IsEqualTo(expected))
Verification passed.

将实际值更改为 "Milky way "。测试失败,因为实际值和预期值不再相等。

actual = "Milky way ";
testCase.verifyThat(actual,IsEqualTo(expected))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> StringComparator failed.
        --> The strings are not equal.
        
        Actual Value:
            "Milky way "
        Expected Value:
            "Milky Way"
    ------------------
    Stack Information:
    ------------------
    In C:\work\CompareStringsExample.m (CompareStringsExample) at 22

要使测试通过,请忽略大小写和空白字符。

testCase.verifyThat(actual,IsEqualTo(expected, ...
    "IgnoringCase",true,"IgnoringWhitespace",true))
Verification passed.

使用支持所有数据类型的比较器比较两个对象的公共属性。

在当前文件夹内一个名为 Student.m 的文件中创建 Student 类。该类有两个公共属性和一个私有属性。

classdef Student
    properties (SetAccess=immutable)
        Name
        Age
    end
    properties (Access=private)
        Field
    end
    methods
        function obj = Student(name,age,field)
            arguments
                name = "";
                age = [];
                field = "";
            end
            obj.Name = name;
            obj.Age = age;
            obj.Field = field;
        end
    end
end

导入此示例中使用的类。

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.PublicPropertyComparator

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

testCase = TestCase.forInteractiveUse;

创建两个 Student 对象,并使用 IsEqualTo 约束比较它们。在此示例中,因为私有属性中的值不同,测试失败。

s1 = Student("Mary Jones",20,"physics");
s2 = Student("Mary Jones",20,"biology");
testCase.verifyThat(s1,IsEqualTo(s2))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> ObjectComparator failed.
        --> The objects are not equal using "isequaln".
        
        Actual Value:
          Student with properties:
        
            Name: "Mary Jones"
             Age: 20
        Expected Value:
          Student with properties:
        
            Name: "Mary Jones"
             Age: 20
    ------------------
    Stack Information:
    ------------------
    In C:\work\ComparePublicPropertiesExample.m (ComparePublicPropertiesExample) at 29

使用 PublicPropertyComparator 实例重复该测试。由于 NameAge 属性属于不同类型,请使用支持所有数据类型的比较器来执行比较。尽管 s1.Fields2.Field 具有不同的值,测试仍通过,因为比较器只检查 s1s2 的公共属性。

testCase.verifyThat(s1,IsEqualTo(s2, ...
    "Using",PublicPropertyComparator.supportingAllValues))
Verification passed.

创建一个新的 Student 对象,并将其与 s1 进行比较。测试失败,因为 s1.Names3.Name 的值不同。

s3 = Student("mary jones",20,"chemistry");
testCase.verifyThat(s1,IsEqualTo(s3, ...
    "Using",PublicPropertyComparator.supportingAllValues))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> Path to failure: <Value>.Name
        --> StringComparator failed.
            --> The strings are not equal.
            
            Actual Value:
                "Mary Jones"
            Expected Value:
                "mary jones"
    
    Actual Value:
      Student with properties:
    
        Name: "Mary Jones"
         Age: 20
    Expected Value:
      Student with properties:
    
        Name: "mary jones"
         Age: 20
    ------------------
    Stack Information:
    ------------------
    In C:\work\ComparePublicPropertiesExample.m (ComparePublicPropertiesExample) at 44

要使测试通过,请使用忽略大小写的比较器。

testCase.verifyThat(s1,IsEqualTo(s3, ...
    "Using",PublicPropertyComparator.supportingAllValues( ...
    "IgnoringCase",true)))
Verification passed.

您也可以指示比较器在比较期间忽略 Name 属性。

testCase.verifyThat(s1,IsEqualTo(s3, ...
    "Using",PublicPropertyComparator.supportingAllValues( ...
    "IgnoringProperties","Name")))
Verification passed.

详细信息

全部展开

版本历史记录

在 R2013a 中推出

全部展开