Main Content

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

matlab.unittest.constraints.IsSameSetAs 类

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

测试集合是否与另一个集合有相同的元素

描述

matlab.unittest.constraints.IsSameSetAs 类提供约束来测试一个集合是否与另一个集合相同。集合可以具有不同顺序、不同数量或不同形状的相同元素。

该约束使用 ismember 函数来比较各个集合。因此,ismember 函数必须支持用于约束的实际值和预期值。

创建对象

描述

c = matlab.unittest.constraints.IsSameSetAs(expected) 创建一个约束来测试一个集合是否与 expected 集合具有相同的元素。对于实际集合 actual,如果 ismember(actual,expected)ismember(expected,actual) 都返回包含所有 true 值的数组,并且至少满足以下条件之一,则满足约束:

  • actualexpected 属于同一个类。

  • isobject(actual) 返回 true

  • isobject(expected) 返回 true

示例

c = matlab.unittest.constraints.IsSameSetAs(expected,RespectingCount=tf) 还指定是否考虑元素计数。如果 tftrue,并且元素在实际集合和预期集合中出现的次数不同,则不满足约束。 (自 R2024a 起)

示例

输入参量

全部展开

预期集合,指定为 ismember 函数支持的任何数据类型的值。

此参量设置 ExpectedSet 属性。

示例: {'a','b','c'}

示例: [1 1 2 3 5 8]

自 R2024a 起

比较实际集合和预期集合时考虑元素计数的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。如果该值为 true,并且一个元素在实际集合中出现的次数不同于该元素在 expected 中出现的次数,则不满足约束。默认情况下,约束会忽略元素出现的次数。

此参量设置 RespectCount 属性。

属性

全部展开

预期集合,以 ismember 函数支持的任何数据类型的值形式返回。在创建约束的过程中指定此属性的值。

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

属性:

GetAccess
public
SetAccess
private

自 R2024a 起

比较实际集合和预期集合时考虑元素计数的选项,以 logical 数据类型的 01 形式返回。默认情况下,约束会忽略元素出现的次数。

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

属性:

GetAccess
public
SetAccess
private

示例

全部折叠

使用 IsSameSetAs 约束比较集合。

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsSameSetAs

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

testCase = TestCase.forInteractiveUse;

验证 {'a','b','c'}{'c','a','b'} 是同一个集合。即使实际集合和预期集合中的元素顺序不同,测试也会通过,因为两个集合包含相同的元素。

testCase.verifyThat({'a','b','c'},IsSameSetAs({'c','a','b'}))
Verification passed.

使用 {'a','b','d'} 作为预期集合再次进行测试。测试失败,因为两个集合包含不同元素。

testCase.verifyThat({'a','b','c'},IsSameSetAs({'a','b','d'}))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsSameSetAs failed.
    --> The actual value contains 1 element(s) not found in the expected set:
        --> Element at index 3:
                {'c'}
    --> The actual value is missing 1 element(s) found in the expected set:
        --> Element at index 3:
                {'d'}
    
    Actual Value:
      1×3 cell array
    
        {'a'}    {'b'}    {'c'}
    Expected Set:
      1×3 cell array
    
        {'a'}    {'b'}    {'d'}

验证 {'a','b','c'}{'a'} 不是同一个集合。

testCase.verifyThat({'a','b','c'},~IsSameSetAs({'a'}))
Verification passed.

使用 IsSameSetAs 约束比较数值向量 [1 2 3][3; 2; 1]。即使元素的顺序和向量的形状不同,测试也会通过,因为这两个集合包含相同的元素。

testCase.verifyThat([1 2 3],IsSameSetAs([3; 2; 1]))
Verification passed.

测试 [1 2 3] 是否与 [1 2 3 1 2] 是同一个集合。测试通过,因为这些集合具有相同的元素。默认情况下,在比较实际集合和预期集合时,约束会忽略元素出现的次数。

testCase.verifyThat([1 2 3],IsSameSetAs([1 2 3 1 2]))
Verification passed.

通过考虑元素计数,更严格地比较实际集合和预期集合。测试失败是因为元素 12 在实际集合和预期集合中出现的次数不同。

testCase.verifyThat([1 2 3],IsSameSetAs([1 2 3 1 2], ...
    RespectingCount=true))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsSameSetAs failed.
    --> The actual value contains at least one element with a different count in the expected set.
        --> Actual value at index 1 does not respect the element count.
             Value:
                 1
             Actual Count: 1
             Expected Count: 2
    
    Actual Value:
         1     2     3
    Expected Set:
         1     2     3     1     2

版本历史记录

在 R2018a 中推出

全部展开