exponenta event banner

matlab.unittest.constraints.StructComparator класс

Пакет: matlab.unittest.constraints

Компаратор для матриц структуры MATLAB

Строительство

StructComparator создает компаратор для массивов структуры MATLAB ®.

StructComparator(compObj) указывает компаратор, compObj, который определяет компаратор, используемый для сравнения значений, содержащихся в структуре. По умолчанию a StructComparator поддерживает только пустые массивы структуры.

StructComparator(compObj,Name,Value) предоставляет компаратор с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары.

StructComparator(Name,Value) обеспечивает компаратор для пустых массивов структуры с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары.

Входные аргументы

развернуть все

compObj

Объект-компаратор

Компаратор передается в StructComparator для поддержки типов данных во время рекурсии. По умолчанию StructComparator поддерживает только пустые массивы структуры.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Поля для игнорирования при сравнении структур, заданные как массив ячеек из символьных векторов или строковый массив.

Установка рекурсивного режима работы компаратора, указанного как false или true (logical 0 или 1). Когда это значение равно falseкомпаратор не работает рекурсивно над своими данными.

Когда значение равно true, типы данных StructComparator поддержка полностью поддерживается в рекурсии. Например:

comp1 = StructComparator(NumericComparator);
comp2 = StructComparator(NumericComparator, 'Recursively', true);
Оба comp1 и comp2 поддерживают структуры, содержащие числовые значения в качестве полей. Однако только comp2 поддерживает структуры, рекурсивно содержащие либо структуры, либо числовые значения в качестве полей.

Свойства

IgnoredFields

Поля для игнорирования при сравнении структур, указанные в аргументе пары имя-значение, 'IgnoringFields'.

Recursive

Индикатор того, работает ли компаратор рекурсивно, указанный в аргументе пары имя-значение, 'Recursively'.

Копирование семантики

Значение. Сведения о том, как классы значений влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

Создайте тестовый пример для интерактивного тестирования.

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

testCase = TestCase.forInteractiveUse;

Создайте две равные структуры.

s1 = struct('id',7,'score',7.3);
s2 = s1;

Проверьте, что конструкции равны. По умолчанию StructComparator поддерживает только пустые структуры, поэтому необходимо сконфигурировать компаратор с NumericComparator.

testCase.verifyThat(s1, IsEqualTo(s2, 'Using', ...
    StructComparator(NumericComparator)))
Verification passed.

Изменение оценки s2 и снова сравнить структуры.

s2.score = 7.6;
testCase.verifyThat(s1, IsEqualTo(s2, 'Using', ...
    StructComparator(NumericComparator)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> Path to failure: <Value>.score
        --> NumericComparator failed.
            --> The numeric values are not equal using "isequaln".
            --> Failure table:
                    Actual    Expected    Error       RelativeError   
                    ______    ________    _____    ___________________
                     7.3        7.6       -0.3     -0.0394736842105263
            
            Actual Value:
               7.300000000000000
            Expected Value:
               7.600000000000000
    
    Actual Value:
      struct with fields:
    
           id: 7
        score: 7.300000000000000
    Expected Value:
      struct with fields:
    
           id: 7
        score: 7.600000000000000

Укажите абсолютный допуск для сравнения.

testCase.verifyThat(s1, IsEqualTo(s2, 'Using', ...
    StructComparator(NumericComparator), 'Within', ...
    AbsoluteTolerance(0.5)))
Verification passed.

Создайте тестовый пример для интерактивного тестирования.

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

testCase = TestCase.forInteractiveUse;

Создайте две структуры. Сделайте одно из полей вложенной структурой.

e1 = struct('name', struct('first','sam','last','smith'), ...
    'location','Building A');
e2 = e1;

Убедитесь, что эти две структуры равны. Поскольку структура содержит вложенную структуру, настройте ограничение для рекурсивной работы.

testCase.verifyThat(e1, IsEqualTo(e2, 'Using', ...
    StructComparator(StringComparator, 'Recursively', true)))
Verification passed.

Изменение поля имени e2 и повторите сравнение.

e2.name.first = ' SAM';
testCase.verifyThat(e1, IsEqualTo(e2, 'Using', ...
    StructComparator(StringComparator, 'Recursively', true)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> Path to failure: <Value>.name.first
        --> StringComparator failed.
            --> The character arrays are not equal.
            
            Actual char:
                sam
            Expected char:
                 SAM
    
    Actual Value:
      struct with fields:
    
            name: [1×1 struct]
        location: 'Building A'
    Expected Value:
      struct with fields:
    
            name: [1×1 struct]
        location: 'Building A'

Настройте компаратор на игнорирование символов регистра и пробела.

testCase.verifyThat(e1, IsEqualTo(e2, 'Using', ...
    StructComparator(StringComparator, 'Recursively', true), ...
    'IgnoringCase', true, 'IgnoringWhitespace', true))
Verification passed.

Совет

  • В большинстве случаев использование StructComparator объект. IsEqualTo создает ограничение для проверки на равенство между данными различных типов, включая структуры.

    Использовать StructComparator когда необходимо переопределить сравнение, выполненное IsEqualTo класс. Например, если вы хотите, чтобы сравнение завершилось неудачей, когда структуры включают нечисловые значения, включите StructComparator объект в тесте. В этом примере MATLAB создает исключение, поскольку s1 и s2 содержат нечисловые значения.

    import matlab.unittest.constraints.IsEqualTo
    import matlab.unittest.constraints.StructComparator
    import matlab.unittest.constraints.NumericComparator
       
    s1 = struct('f1',zeros(1,10),'f2','a','f3',{'b','c'});
    s2 = s1;
    
    testCase = matlab.unittest.TestCase.forInteractiveUse;
    testCase.verifyThat(s2,IsEqualTo(s1,'Using',StructComparator(NumericComparator)))
    

Представлен в R2013a