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

Пакет: 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. Имя должно находиться внутри одинарных кавычек (' '). Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN.

Входные параметры

expVal

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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'. Это свойство применяется на всех уровнях рекурсии, таких как вложенные структуры.

Примеры

свернуть все

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

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%.

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

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.

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

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