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

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

s2.score = 7.6;
testCase.verifyThat(s1, IsEqualTo(s2, 'Using', ...
    StructComparator(NumericComparator)))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> NumericComparator failed.
    Path to failure: <Value>.score
    --> The values are not equal using "isequaln".
    --> Failure table:
                Actual    Expected    Error       RelativeError   
                ______    ________    _____    ___________________
            
                7.3       7.6         -0.3     -0.0394736842105263
    
    Actual double:
           7.300000000000000
    Expected double:
           7.600000000000000

Actual struct:
           id: 7
        score: 7.300000000000000
Expected struct:
           id: 7
        score: 7.600000000000000

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

testCase.verifyThat(s1, IsEqualTo(s2, 'Using', ...
    StructComparator(NumericComparator), 'Within', ...
    AbsoluteTolerance(0.5)))
Interactive 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)))
Interactive verification passed.

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

e2.name.first = ' SAM';
testCase.verifyThat(e1, IsEqualTo(e2, 'Using', ...
    StructComparator(StringComparator, 'Recursively', true)))
Interactive 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 struct:
            name: [1×1 struct]
        location: 'Building A'
Expected struct:
            name: [1×1 struct]
        location: 'Building A'

Сконфигурируйте компаратор, чтобы игнорировать регистр и пробельные символы.

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

Введенный в R2013a

Была ли эта тема полезной?