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

Объект Comparator

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

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

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

Пример: PublicPropertyComparator ('IgnoringProperties', {'стек'})

Установка для того, действует ли компаратор рекурсивно, заданный как 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

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