matlab.unittest.constraints.StructComparator class

Пакет: matlab.unittest.constraints

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

Конструкция

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

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

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

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

Входные параметры

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

compObj

Объект Comparator

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

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

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

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

Установка для того, действует ли компаратор рекурсивно в виде false или true логический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 объект. 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