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) — соответствующее значение. 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