exponenta event banner

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

Пакет: matlab.unittest.constraints

Компаратор общедоступных свойств объектов MATLAB

Описание

PublicPropertyComparator сравнивает общие свойства объектов MATLAB ® .

PublicPropertyComparator поддерживает объекты MATLAB или массивы объектов и рекурсивно сравнивает структуры данных, содержащиеся в общедоступных свойствах. PublicPropertyComparator отличается от isequal функция, поскольку она проверяет только открытые свойства объектов.

Как правило, создается PublicPropertyComparator с использованием supportingAllValues статический метод.

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

PublicPropertyComparator создает компаратор для общих свойств объектов MATLAB. Этот компаратор поддерживает только объекты без общих свойств.

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

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

Методы

supportingAllValuesКомпаратор для общедоступных свойств, поддерживающий любое значение в рекурсии

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

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

compObj

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

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

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

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

Пример: PublicPropertyComparator('IgnoringProperties',{'Stack'})

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

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

Свойства

IgnoredProperties

Свойства, игнорируемые при сравнении объектов, указанные в аргументе пары имя-значение, 'IgnoringProperties'.

Recursive

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

Ограничения

  • PublicPropertyComparator не сравнивает общие свойства объектов, которые перегружают subsref, numel, или properties функции.

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

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

Примеры

свернуть все

В файле в рабочей папке создайте это Employee класс.

classdef Employee
    properties (SetAccess=immutable)
        Name
    end
    properties (Access=private)
        Location
    end
    methods
        function obj = Employee(name,location)
            obj.Name = name;
            obj.Location = location;
        end
    end
end

В командной строке создайте два экземпляра Employee класс.

e1 = Employee('sam','Building A');
e2 = Employee('Sam','Building B');

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

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

testCase = TestCase.forInteractiveUse;

Создайте компаратор и убедитесь, что e1 и e2 равны.

compObj = PublicPropertyComparator;
testCase.verifyThat(e1, IsEqualTo(e2,'Using',compObj))
Error using matlab.unittest.constraints.Comparator/throwUnsupportedValue (line 313)
None of the currently available comparators support the value.

Available Comparators:
    1×0 Comparator array with no properties.

Value (char):
        Sam

Error in matlab.unittest.constraints.Comparator>getActExpCompFrom (line 402)
    throwUnsupportedValue(comparison.Comparators,expVal);

Error in matlab.unittest.constraints.Comparator>deepComparisonIsSatisfied (line 351)
[actVal,expVal,comp] = getActExpCompFrom(comparison);

Error in matlab.unittest.constraints.Comparator>deepComparisonIsSatisfied (line 355)
        if ~deepComparisonIsSatisfied(subComparisonArray(k))

Error in matlab.unittest.constraints.Comparator/satisfiedBy (line 84)
            bool = deepComparisonIsSatisfied(comparison);

Error in matlab.unittest.constraints.IsEqualTo/satisfiedBy (line 193)
            bool = constraint.Comparator.satisfiedBy(actual,constraint.Expected);

Error in matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 80)
                result = constraint.satisfiedBy(actual);

Error in matlab.unittest.qualifications.Verifiable/verifyThat (line 230)
            qualifyThat(verifiable.VerificationDelegate, ...

Тест завершается неуспешно, поскольку по умолчанию PublicPropertyComparator не поддерживает символьные векторы.

Создайте компаратор, поддерживающий символьные векторы. Укажите, что сравнение не учитывает регистр.

compObj = PublicPropertyComparator(StringComparator);
testCase.verifyThat(e1, IsEqualTo(e2,'Using',compObj, 'IgnoringCase',true))
Interactive verification passed.

Тест проходит, хотя e1.Location и e2.Location не те же самые. С тех пор Location является частной собственностью, компаратор не сравнивает ее содержимое.

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