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

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

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

Описание

Класс IsEqualTo создает ограничение, которое сравнивает данные для равенства. Типом сравнения, которое это использует, управляют по условию тип ожидаемого значения. Во-первых, среда тестирования проверяет, является ли ожидаемое значение объектом. Эта проверка выполнена сначала, потому что это возможно для объекта иметь переопределенные методы, которые используются в последующих проверках (e. g. 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 must appear inside single quotes (''). Вы может задать несколько аргументов в виде пар "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN.

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

expVal

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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.

Игнорирование регистра

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

IgnoredFields

Поля, чтобы проигнорировать во время сравнения struct, заданного в аргументе в виде пар "имя-значение", 'IgnoringFields'.

IgnoreWhitespace

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

Допуск

Определенный допуск, используемый в конструкции ограничения, заданного как объект 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))
Interactive verification passed.

Примите, что фактическое значение 4.95. Проверьте, что различие между фактическим значением и ожидаемым значением - меньше чем 0,09.

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

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

testCase.verifyThat(4.9,IsEqualTo(expVal,'Within',RelativeTolerance(0.01)))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> NumericComparator failed.
    --> The values are not equal using "isequaln".
    --> RelativeTolerance failed.
        --> The error was not within relative tolerance.
        --> Failure table:
            value =
            
              1×5 table array
            
                Actual    Expected           Error              RelativeError       RelativeTolerance
                ______    ________    ___________________    ___________________    _________________
            
                4.9       5           -0.0999999999999996    -0.0199999999999999    0.01             
    
    Actual double:
           4.900000000000000
    Expected double:
             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))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> NumericComparator failed.
    --> The values are not equal using "isequaln".
    --> Failure table:
                Actual    Expected           Error               RelativeError    
                ______    ________    ____________________    ____________________
            
                0.3       0.3         5.55111512312578e-17    1.85037170770859e-16

Actual double:
       0.300000000000000
Expected double:
       0.300000000000000

Этот тест перестал работать должный округлить ошибку в арифметике с плавающей точкой.

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

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

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

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

testCase = TestCase.forInteractiveUse;

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

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

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

testCase.verifyThat('hello',IsEqualTo(expVal))
Interactive 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))
Interactive verification passed.

Проигнорируйте пробел и протестируйте два векторов символов.

expVal = 'a bc';
testCase.verifyThat('abc',IsEqualTo(expVal,'IgnoringWhitespace',true))
testCase.verifyThat('ab c',IsEqualTo(expVal,'IgnoringWhitespace',true))
Interactive verification passed.
Interactive 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)))
Interactive 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

Была ли эта тема полезной?