Пакет: matlab.test.behavior
Суперклассы: matlab.unittest.TestCase
Протестируйте, если класс удовлетворяет контракт для значений missing
Чтобы протестировать, если значение missing
для вашего класса удовлетворяет недостающий контракт в MATLAB®, создайте тестовый класс, который выводит от класса matlab.test.behavior.Missing
. Если ваш класс представляет тип данных, и вы хотите, чтобы MATLAB обработал значения missing
вашего класса, подобного встроенным классам, гарантировал, что ваш класс удовлетворяет контракт missing
.
Как правило, вы используете тест поведения в качестве части рабочего процесса разработки через тестирование. Если вы хотите, чтобы отсутствующее значение для вашего класса удовлетворило недостающий контракт с MATLAB, запишите, что поведение тестирует и изменяет класс под тестом, пока результаты испытаний не состоят в том, как вы ожидаете. Например, если ваш класс поддерживает сравнения и упорядоченное расположение и применим как индикатор отсутствующего значения, все тесты должны передать. Если ваш класс не поддерживает упорядоченное расположение, установил свойство SupportsOrdering
на false
и ожидает, что MATLAB отфильтровывает тесты, сопоставленные с упорядоченным расположением.
Ваш тест поведения только должен вывести от matlab.test.behavior.Missing
и задать абстрактные свойства. Однако, поскольку matlab.test.behavior.Missing
является подклассом matlab.unittest.TestCase
, можно использовать функциональность Среды Модульного тестирования.
Краткий обзор | tRUE |
HandleCompatible | tRUE |
Для получения информации об атрибутах класса см. Атрибуты класса.
Задайте значения для всех свойств abstract
в блоке properties
вашего тестового класса.
MissingValue
Отсутствующее значение для класса под тестомОтсутствующее значение для класса под тестом, заданным как допустимое скалярное значение MATLAB или выражение, которое возвращает неотсутствующее значение.
Пример: NaN
или missing
или ' '
SetAccess | общественность |
GetAccess | общественность |
Краткий обзор | tRUE |
PrototypeValue
— Неотсутствующее значение для класса под тестомЛюбое неотсутствующее значение для класса под тестом, заданным как допустимое скалярное значение MATLAB или выражение, которое возвращает неотсутствующее значение. Как правило, если конструктор класса возвращает неотсутствующее значение, PrototypeValue
является вызовом конструктора.
Пример: 0 или datetime
SetAccess | общественность |
GetAccess | общественность |
Краткий обзор | tRUE |
ClassesWithSupportedConversions
— Классы, которые могут быть преобразованы в класс под тестомСписок классов, которые могут быть преобразованы в класс под тестом, задал как массив строк имен классов.
Если можно преобразовать в другой класс и затем обратно в класс, то класс имеет поддерживаемое преобразование из другого класса. Например, если MyClass(OtherClass(missing)) == MyClass(missing)
, чем OtherClass
является классом с поддерживаемым covnersions.
Пример: "string"
или ["double","single"]
SetAccess | общественность |
GetAccess | общественность |
Краткий обзор | tRUE |
Типы данных: string
При необходимости переопределите значения для конкретных свойств в функции в блоке методов TestClassSetup
вашего тестового класса.
SupportsComparison
— Класс поддерживает сравнениеtrue
(значение по умолчанию) | false
Индикатор, что класс поддерживает сравнение, заданное как true
или false
. Класс, который поддерживает сравнения, позволяет использование ==
и ~=
.
Если вы устанавливаете SupportsComparison
на false
, ожидаете, что сравнение и заказывающие тесты будут отфильтрованы отказом предположения. MATLAB не запускает тесты.
SetAccess | защищенный |
GetAccess | общественность |
Типы данных: логический
SupportsOrdering
— логический скаляр, чтобы управлять выполнением <>, и т.дtrue
(значение по умолчанию) | false
Индикатор, что класс поддерживает упорядоченное расположение, заданное как true
или false
. Класс, который поддерживает упорядоченное расположение, позволяет использование <
, >
, <=
и >=
.
Если вы устанавливаете SupportsOrdering
на false
, ожидаете, что сопоставленные тесты будут отфильтрованы отказом предположения. MATLAB не запускает тесты.
SetAccess | защищенный |
GetAccess | общественность |
Типы данных: логический
UsableAsMissingIndicator
— Класс применим как индикатор отсутствующего значенияtrue
(значение по умолчанию) | false
Индикатор, что класс применим как индикатор отсутствующего значения к функции ismissing
, заданной как true
или false
.
Если вы устанавливаете UsableAsMissingIndicator
на false
, ожидаете, что сопоставленные тесты будут отфильтрованы отказом предположения. MATLAB не запускает тесты.
SetAccess | защищенный |
GetAccess | общественность |
Типы данных: логический
'FillValue'
Значение для роста массиваMissingValue
(значение по умолчанию) | допустимое скалярное значение MATLABЗначение заливки, которое ваш класс использует для роста массивов, заданных как допустимое скалярное значение MATLAB. По умолчанию значение FillValue
совпадает со значением свойства MissingValue
.
Пример: 0
SetAccess | защищенный |
GetAccess | общественность |
Создайте класс MyDataClass
, который может содержать отсутствующее значение. Класс поддерживает сравнение и упорядоченное расположение, и реализация отсутствующего значения должна удовлетворить недостающий контракт в MATLAB. Если вы вызываете конструктора без входных параметров, это возвращает отсутствующее значение.
classdef MyDataClass properties SomeData; MissingVal = false; end methods function obj = MyDataClass(value) if nargin m = size(value,1); n = size(value,2); for i = 1:m for j = 1:n if ismissing(value(i,j)) obj(i,j).MissingVal = true; else obj(i,j).SomeData = value(i,j); obj(i,j).MissingVal = false; end end end else obj.MissingVal = true; end end % Define ismissing behavior function m = ismissing(obj,v) if nargin > 1 m = isequaln(obj,v); else m = [obj.MissingVal]; end m = reshape(m,size(obj)); end end end
Создать простой тестовый класс, который проверяет, что MyDataClass
удовлетворяет контракт отсутствующего значения, подкласс matlab.test.behavior.Missing
. Тест может использовать функциональность среды модульного тестирования, но MissingValueTest
проверяет недостающий контракт только.
classdef MissingValueTest < matlab.test.behavior.Missing properties MissingValue = MyDataClass; PrototypeValue = MyDataClass(7); ClassesWithSupportedConversions = []; end end
Запустите тесты и рассмотрите результаты. Тесты для сравнения, упорядоченного расположения, равенства и использования MyDataClass
как второй вход к сбою ismissing
.
results = runtests('MissingValueTest');
Running MissingValueTest .... ================================================================================ Error occurred in MissingValueTest/comparison and it did not run to completion. --------- Error ID: --------- 'MATLAB:UndefinedFunction' -------------- Error Details: -------------- Undefined function 'eq' for input arguments of type 'MyDataClass'. Error in matlab.test.behavior.Missing/comparison (line 129) testCase.verifyFalse(testCase.MissingValue == testCase.MissingValue, getString(message('MATLAB:test:behavior:missing:EqualFalse'))); ================================================================================ . ================================================================================ Error occurred in MissingValueTest/ordering and it did not run to completion. --------- Error ID: --------- 'MATLAB:UndefinedFunction' -------------- Error Details: -------------- Undefined function 'lt' for input arguments of type 'MyDataClass'. Error in matlab.test.behavior.Missing/ordering (line 136) testCase.verifyFalse(testCase.MissingValue < testCase.MissingValue, getString(message('MATLAB:test:behavior:missing:LessThanFalse'))); ================================================================================ . ================================================================================ Verification failed in MissingValueTest/isequalRules. ---------------- Test Diagnostic: ---------------- isequal(MissingValue, MissingValue) must return false, because all missing values are unequal. --------------------- Framework Diagnostic: --------------------- verifyFalse failed. --> The value must evaluate to "false". Actual Value: logical 1 ------------------ Stack Information: ------------------ In <matlabroot>\toolbox\matlab\datatypes\+matlab\+test\+behavior\Missing.m (Missing.isequalRules) at 145 ================================================================================ ================================================================================ Verification failed in MissingValueTest/isequalRules. ---------------- Test Diagnostic: ---------------- isequaln(MissingValue, missing) must return true. --------------------- Framework Diagnostic: --------------------- verifyTrue failed. --> The value must evaluate to "true". Actual Value: logical 0 ------------------ Stack Information: ------------------ In <matlabroot>\toolbox\matlab\datatypes\+matlab\+test\+behavior\Missing.m (Missing.isequalRules) at 147 ================================================================================ . ================================================================================ Verification failed in MissingValueTest/IsMissing2ndInput. ---------------- Test Diagnostic: ---------------- ismissing(MissingValue, missing) must return true. --------------------- Framework Diagnostic: --------------------- verifyTrue failed. --> The value must evaluate to "true". Actual Value: logical 0 ------------------ Stack Information: ------------------ In <matlabroot>\toolbox\matlab\datatypes\+matlab\+test\+behavior\Missing.m (Missing.IsMissing2ndInput) at 154 ================================================================================ ... Done MissingValueTest __________ Failure Summary: Name Failed Incomplete Reason(s) ================================================================================= MissingValueTest/comparison X X Errored. --------------------------------------------------------------------------------- MissingValueTest/ordering X X Errored. --------------------------------------------------------------------------------- MissingValueTest/isequalRules X Failed by verification. --------------------------------------------------------------------------------- MissingValueTest/IsMissing2ndInput X Failed by verification.
Итеративно обновите MyDataClass
, чтобы удовлетворить недостающий контракт. Чтобы удовлетворить сравнение и упорядоченное расположение, задайте eq
, ne
, lt
, gt
, le
и ge
в блоке methods
MyDataClass
.
% Class supports comparison function tf = eq(obj1,obj2) tf = ~any(ismissing([obj1 obj2])) && eq(obj1.SomeData,obj2.SomeData); end function tf = ne(obj1,obj2) tf = ~eq(obj1,obj2); end % Class supports ordering function tf = lt(obj1,obj2) tf = ~any(ismissing([obj1 obj2])) && lt(obj1.SomeData,obj2.SomeData); end function tf = gt(obj1,obj2) tf = lt(obj2,obj1); end function tf = le(obj1,obj2) tf = ~any(ismissing([obj1 obj2])) && ~gt(obj1,obj2); end function tf = ge(obj1,obj2) tf = le(obj2,obj1); end
Запустите тесты с кратким уровнем выходная деталь и рассмотрите результаты.
results = runtests('MissingValueTest','OutputDetail',1);
...... FAIL: MissingValueTest/isequalRules in Missing.isequalRules at 145 :: verifyFalse failed. FAIL: MissingValueTest/isequalRules in Missing.isequalRules at 147 :: verifyTrue failed. . FAIL: MissingValueTest/IsMissing2ndInput in Missing.IsMissing2ndInput at 154 :: verifyTrue failed. ...
Итеративно обновите MyDataClass
, чтобы удовлетворить правила равенства. Задайте isqual
и isequaln
в блоке methods
MyDataClass
.
% Class supports isequal/isequaln rules function tf = isequal(obj1,obj2) tf = eq(obj1,obj2); end function tf = isequaln(obj1,obj2) tf = all(ismissing([obj1 obj2])) || eq(obj1,obj2); end
Запустите тесты и рассмотрите результаты. Тестовая передача и MyDataClass
удовлетворяют контракт отсутствующего значения.
results = runtests('MissingValueTest');
Running MissingValueTest .......... Done MissingValueTest __________
Тест поведения утверждает, что следующие условия верны.
Отсутствующее значение в свойстве MissingValue
является тем же классом как значение в свойстве PrototypeValue
.
MissingValue
и значения PrototypeValue
являются скаляром.
Функция ismissing
, вызванная со значением MissingValue
, возвращает true
.
Функция ismissing
, вызванная со значением PrototypeValue
, возвращает false
.
Тест поведения проверяет, что преобразование отсутствующего значения к экземпляру вашего класса возвращает то же значение как свойство MissingValue
.
Кроме того, для каждого класса, который может преобразовать ваш класс, тест поведения проверяет преобразование отсутствующих значений. Например, если можно преобразовать между OtherClass
и MyClass
, тест поведения проверяет тот MyClass(OtherClass(missing)) == MyClass(missing)
. Свойство ClassesWithSupportedConversions
указывает, какие классы ваш класс может преобразовать.
Учитывая массив объектов вашего класса, преобразованные в нижний индекс тесты присвоения проверяют, что можно расширить массив с помощью отсутствующего значения и присвоить отсутствующее значение области значений элементов в массиве.
Тесты конкатенации проверяют, что массивы объектов вашего класса могут быть конкатенированы с отсутствующими значениями.
Тесты равенства проверяют, что isequal
возвращает false
для двух отсутствующих значений, и isequaln
возвращает true
для двух отсутствующих значений.
SupportsComparison
По умолчанию тест поведения принимает, что ваш класс поддерживает сравнение значений, включая отсутствующие значения. Тесты сравнения проверяют, что вы реализовали ==
и ~=
, как MATLAB ожидает относительно отсутствующих значений.
Сравнение двух отсутствующих значений с ==
возвращает false
.
Сравнение двух отсутствующих значений с ~=
возвращает true
.
Если ваш класс не поддерживает сравнения, установите свойство SupportsComparison
на false
, таким образом, MATLAB не запускает эти тесты. В этом случае тесты сравнения отфильтрованы как отказы предположения. Кроме того, если SupportsComparison = false
, MATLAB не запускает тесты упорядоченного расположения.
SupportsOrdering
По умолчанию тест поведения принимает что ваше упорядоченное расположение поддержек класса значений, включая отсутствующие значения. Тесты упорядоченного расположения проверяют, что вы реализовали <
, >
, <=
и >=
, как MATLAB ожидает относительно отсутствующих значений. Для отсутствующих значений MATLAB ожидает, что все операции упорядоченного расположения возвращают false
.
Если ваш класс поддерживает упорядоченное расположение, чтобы удовлетворить контракт поведения, это должно также поддержать сравнения. Если SupportsComparison = false
, MATLAB не запускает тесты упорядоченного расположения или тесты сравнения. В этом случае тесты упорядоченного расположения отмечены как отказы предположения (отфильтрованные тесты).
Если ваш класс не поддерживает упорядоченное расположение, установите свойство SupportsOrdering
на false
, таким образом, MATLAB не запускает эти тесты. В этом случае тесты упорядоченного расположения отмечены как отказы предположения (отфильтрованные тесты).
UsableAsMissingIndicator
По умолчанию тест поведения принимает, что экземпляр вашего класса может использоваться в качестве дополнительного входного параметра к функции ismissing
, которая представляет индикатор отсутствующего значения.
Если ваш класс не может быть индикатором отсутствующего значения, установить свойство UsableAsMissingIndicator
на false
, таким образом, MATLAB не запускает эти тесты. В этом случае тесты упорядоченного расположения отмечены как отказы предположения (отфильтрованные тесты).
FillValue
Тест поведения проверяет, что, когда MATLAB выращивает массив элементов вашего класса, новым элементам задало значение свойство FillValue
. По умолчанию свойство FillValue
совпадает со свойством MissingValue
. Однако можно задать различное значение для FillValue
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.