exponenta event banner

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

Пакет: matlab.unittest.constraints
Суперклассы: matlab.unittest.constraints.BooleanConstraint

Общее ограничение для сравнения для равенства

Описание

IsEqualTo создает ограничение, сравнивающее данные для равенства. Тип сравнения, который он использует, определяется типом данных ожидаемого значения. Во-первых, структура тестирования проверяет, является ли ожидаемое значение объектом. Эта проверка выполняется в первую очередь, поскольку объект может иметь переопределенные методы, которые используются в последующих проверках (например, islogical). Следующий список классифицирует и описывает различные тесты.

Тип данныхМетод сравнения равенства
Объекты MATLAB ® и Java ®

Если ожидаемым значением является объект MATLAB или Java, IsEqualTo ограничение вызывает isequaln метод, если он определен для объекта ожидаемого значения, в противном случае он вызывает isequal. Если проверка возвращает значение false и указан поддерживаемый допуск, IsEqualTo ограничение проверяет фактические и ожидаемые значения эквивалентного класса, размера и разреженности, прежде чем определить, находятся ли значения в пределах допуска.

Если ограничение может определить, что фактические и ожидаемые значения равны, так как они имеют одинаковый класс и размер, а все свойства равны, то IsEqualTo не звонит isequal или isequaln.

Logicals

Если ожидаемым значением является logical, ограничение проверяет фактические и ожидаемые значения эквивалентной разреженности. Если разреженность соответствует, ограничение сравнивает значения со значением isequal способ. В противном случае ограничение не выполняется.

Численные данные

Если ожидаемое значение numeric, ограничение проверяет фактические и ожидаемые значения эквивалентного класса, размера и разреженности. Если все эти проверки совпадают, ограничение использует isequaln способ сравнения. Если isequaln прибыль true, ограничение выполнено. Если сложность не совпадает или isequaln прибыль falseи предоставляется поддерживаемый допуск, ограничение использует допуск в сравнении. В противном случае ограничение не выполняется.

Последовательности

Если ожидаемым значением является string, ограничение использует strcmp функция для проверки фактических и ожидаемых значений равенства. Однако, если IgnoreCase true, строки сравниваются с помощью strcmpi. Если IgnoreWhitespace является true, все символы пробела удаляются из фактических и ожидаемых строк перед их передачей в strcmp или strcmpi.

Структуры

Если ожидаемым значением является struct, ограничение сравнивает число полей фактических и ожидаемых значений. Если значение не равно, ограничение не выполняется. В противном случае каждое поле ожидаемого значения struct должно существовать в фактическом значении struct. Если имена полей отличаются, ограничение не выполняется. Затем ограничение рекурсивно сравнивает поля при анализе глубины. Рекурсия продолжается до тех пор, пока не будет обнаружен тип фундаментальных данных (логический, числовой, строковый или объектный), а затем значения сравниваются, как описано выше.

Массивы ячеек

Если ожидаемым значением является массив ячеек, ограничение проверяет фактическое и ожидаемое значения на равенство размеров. Если они не равны по размеру, ограничение не выполняется. В противном случае каждый элемент массива рекурсивно сравнивается способом, идентичным полям в структуре, описанной выше.

Столы

Если ожидаемым значением является tableфактические и ожидаемые значения проверяются на равенство классов, равенство размеров и на равные свойства таблицы. Если они не равны по свойствам класса, размера или таблицы, ограничение не выполняется. Затем ограничение сравнивает размер и тип каждой переменной столбца и рекурсивно сравнивает каждую строку таблицы при первом анализе глубины. Рекурсия продолжается до тех пор, пока не будет обнаружен тип фундаментальных данных (логический, числовой, строковый или объектный), а затем значения сравниваются, как описано выше.

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

IsEqualTo(expVal) обеспечивает общее ограничение для сравнения для равенства.

IsEqualTo(expVal,Name,Value) предоставляет ограничение с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары. Name должно отображаться внутри отдельных кавычек (''). Можно указать несколько аргументов пары имя-значение в любом порядке как Name1,Value1,...,NameN,ValueN.

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

expVal

Ожидаемое значение, которое сравнивается с фактическим значением.

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

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

'IgnoringCase'

Индикатор, если ограничение нечувствительно к регистру, указанный как false или true (logical 0 или 1)

По умолчанию: false

'IgnoringFields'

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

По умолчанию: (пусто)

'IgnoringWhitespace'

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

По умолчанию: false

'Using'

Конкретный компаратор, используемый для построения ограничения, указанный как matlab.unittest.constraints.Comparator объект

По умолчанию: (пусто)

'Within'

Допуск для использования в построении зависимости, заданный как matlab.unittest.constraints.Tolerance объект

По умолчанию: (пусто)

Свойства

Comparator

Конкретный компаратор, используемый при построении ограничения, указанный как matlab.unittest.constraints.Comparator объект в аргументе пара имя-значение, 'Using'.

Expected

Ожидаемое значение, которое сравнивается с фактическим значением, указанным в expVal входной аргумент.

IgnoreCase

Индикатор, если ограничение нечувствительно к регистру, указанному в аргументе пары имя-значение, 'IgnoringCase'. Это свойство применяется на всех уровнях рекурсии, таких как вложенные структуры.

IgnoredFields

Поля для игнорирования при сравнении структур, указанные в аргументе пары имя-значение, 'IgnoringFields'. Это свойство применяется на всех уровнях рекурсии, таких как вложенные структуры.

IgnoreWhitespace

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

Tolerance

Определенный допуск, используемый при построении зависимости, указанный как matlab.unittest.constraints.Tolerance объект в аргументе пара имя-значение, 'Within'. Это свойство применяется на всех уровнях рекурсии, таких как вложенные структуры.

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

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

Примеры

свернуть все

Создать TestCase для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

Убедитесь, что фактическое значение 5 равно ожидаемому значению.

expVal = 5;
testCase.verifyThat(5,IsEqualTo(expVal))
Verification passed.

Предположим, что фактическое значение равно 4,95. Убедитесь, что разница между фактическим и ожидаемым значением меньше 0,09.

testCase.verifyThat(4.95,IsEqualTo(expVal,'Within',AbsoluteTolerance(0.09)))
Verification passed.

Предположим, что фактическое значение равно 4.9. Убедитесь, что разница между фактическим и ожидаемым значением меньше 1%.

testCase.verifyThat(4.9,IsEqualTo(expVal,'Within',RelativeTolerance(0.01)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> RelativeTolerance failed.
            --> The error was not within relative tolerance.
            --> Failure table:
                    Actual    Expected           Error              RelativeError       RelativeTolerance
                    ______    ________    ___________________    ___________________    _________________
                     4.9         5        -0.0999999999999996    -0.0199999999999999          0.01       
        
        Actual Value:
           4.900000000000000
        Expected Value:
             5

Эти два значения отличаются более чем на 1%.

Создать TestCase для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

Проверить, что 0.1*3 = 0.3.

act = 0.1*3;
exp = 0.3;
testCase.verifyThat(act, IsEqualTo(exp))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> Failure table:
                Actual    Expected           Error               RelativeError    
                ______    ________    ____________________    ____________________
                 0.3        0.3       5.55111512312578e-17    1.85037170770859e-16
        
        Actual Value:
           0.300000000000000
        Expected Value:
           0.300000000000000

Этот тест завершается неуспешно из-за ошибки округления в арифметике с плавающей запятой.

Сравнение чисел с плавающей запятой выполняется с использованием допуска. Проверить, что 0.1*3 = 0.3 в пределах относительного допуска 2*eps.

testCase.verifyThat(act, IsEqualTo(exp, ...
    'Within', RelativeTolerance(2*eps)))
Verification passed.

Создать TestCase для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo

testCase = TestCase.forInteractiveUse;

Убедитесь, что два символьных вектора равны.

expVal = 'Hello';
testCase.verifyThat('Hello',IsEqualTo(expVal))
Verification passed.

Измените регистр фактического значения и проверьте равенство.

testCase.verifyThat('hello',IsEqualTo(expVal))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> StringComparator failed.
    --> The character arrays are not equal.
    
    Actual char:
        hello
    Expected char:
        Hello

Проигнорируйте регистр и повторите тест.

testCase.verifyThat('hello',IsEqualTo(expVal,'IgnoringCase',true))
Verification passed.

Игнорировать пробелы и тестировать два символьных вектора.

expVal = 'a bc';
testCase.verifyThat('abc',IsEqualTo(expVal,'IgnoringWhitespace',true))
testCase.verifyThat('ab c',IsEqualTo(expVal,'IgnoringWhitespace',true))
Verification passed.
Verification passed.

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

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

testCase = TestCase.forInteractiveUse;

Определение фактических и ожидаемых timeseries объекты. Возмущение одной из фактических точек данных на 1%.

expected = timeseries(1:10);
actual = expected;
actual.Data(7) = 1.01*actual.Data(7);

Проверьте, что фактические и ожидаемые значения равны в пределах относительного допуска 2%.

testCase.verifyThat(actual, IsEqualTo(expected,...
    'Within', RelativeTolerance(.02)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> ObjectComparator failed.
    --> The objects are not equal using "isequal".
    --> The tolerance was ignored. The tolerance as specified does not support comparisons of timeseries values.
    
    Actual timeseries:
          timeseries
        
          Common Properties:
                    Name: 'unnamed'
                    Time: [10x1 double]
                TimeInfo: [1x1 tsdata.timemetadata]
                    Data: [1x1x10 double]
                DataInfo: [1x1 tsdata.datametadata]
        
          More properties, Methods
    Expected timeseries:
          timeseries
        
          Common Properties:
                    Name: 'unnamed'
                    Time: [10x1 double]
                TimeInfo: [1x1 tsdata.timemetadata]
                    Data: [1x1x10 double]
                DataInfo: [1x1 tsdata.datametadata]
        
          More properties, Methods

Используйте PublicPropertyComparator при построении зависимости.

testCase.verifyThat(actual, IsEqualTo(expected,...
    'Within', RelativeTolerance(.02),...
    'Using', PublicPropertyComparator.supportingAllValues))
Interactive verification passed.

Тест завершается успешно, поскольку PublicPropertyComparator сравнивает каждое публичное свойство по отдельности, а не сравнивает объект сразу. В первом тесте ObjectComparator выдерживает сравнение timeseries объектов и, следовательно, опирается на isequal способ timeseries класс. Из-за возмущения в фактическом timeseries, isequal прибыль false. Компаратор не применяет допуск, поскольку двойной допуск не может применяться непосредственно к timeseries объект. В последнем тесте компаратор применяет допуск к каждому публичному свойству, содержащему данные с двойным значением.

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