matlab.unittest.constraints.IsEqualTo class

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

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

Описание

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

Тип данныхМетод сравнения равенства
MATLAB® & Java® Objects

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

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

Logicals

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

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

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

Строки

Если ожидаемым значением является string, ограничение использует strcmp функционируйте, чтобы проверять фактические и ожидаемые значения на равенство. Однако, если IgnoreCase свойство верно, строки сравнены с помощью 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 логический0 или 1)

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

'IgnoringFields'

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

Значение по умолчанию: пустой

'IgnoringWhitespace'

Индикатор, если ограничение нечувствительно к пробелу в виде false или true логический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 класс. Из-за возмущения в фактическом timeseriesisequal возвращает false. Компаратор не применяет допуск, потому что допуск с двойным знаком не может применяться непосредственно к timeseries объект. В последнем тесте компаратор применяет допуск к каждой общественной собственности, которая содержит данные с двойным знаком.

Введенный в R2013a