matlab.unittest.constraints.IsEqualTo class

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

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

Описание

The 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'

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

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

'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

Поля, которые нужно игнорировать во время сравнения struct, заданные в аргументе пары "имя-значение", '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