matlab.unittest.constraints.StructComparator class

Пакет: 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.

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

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

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

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

Свойства

IgnoredFields

Поля, которые нужно игнорировать во время сравнения struct, заданные в аргументе пары "имя-значение", '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;

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

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 объект. The 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