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

Пакет: 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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.

Введенный в R2013a