Пакет: 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
, можно использовать функциональность Среды Модульного тестирования.
Abstract | true |
HandleCompatible | true |
Для получения информации об атрибутах класса см. Атрибуты класса.
Задайте значения для всего abstract
свойства в properties
блок вашего тестового класса.
MissingValue
— Отсутствующее значение для класса под тестомОтсутствующее значение для класса под тестом в виде допустимого скалярного значения MATLAB или выражения, которое возвращает неотсутствующее значение.
Пример: NaN
или missing
или ' '
SetAccess | public |
GetAccess | public |
Abstract | true |
PrototypeValue
— Неотсутствующее значение для класса под тестомЛюбое неотсутствующее значение для класса под тестом в виде допустимого скалярного значения MATLAB или выражения, которое возвращает неотсутствующее значение. Как правило, если конструктор класса возвращает неотсутствующее значение, PrototypeValue
вызов конструктора.
Пример: 0 или datetime
SetAccess | public |
GetAccess | public |
Abstract | true |
ClassesWithSupportedConversions
— Классы, которые могут быть преобразованы в класс под тестомСписок классов, которые могут быть преобразованы в класс под тестом в виде массива строк имен классов.
Если можно преобразовать в другой класс и затем обратно в класс, то класс имеет поддерживаемое преобразование из другого класса. Например, если MyClass(OtherClass(missing)) == MyClass(missing)
чем OtherClass
класс с поддерживаемыми преобразованиями.
Пример: "string"
или ["double","single"]
SetAccess | public |
GetAccess | public |
Abstract | true |
Типы данных: string
При необходимости переопределите значения для конкретных свойств в функции в TestClassSetup
блок методов вашего тестового класса.
SupportsComparison
— Класс поддерживает сравнениеtrue
(значение по умолчанию) | false
Индикатор, что класс поддерживает сравнение в виде true
или false
. Класс, который поддерживает сравнения, позволяет использование ==
и ~=
.
Если вы устанавливаете SupportsComparison
к false
, ожидайте, что сравнение и заказывающие тесты будут отфильтрованы отказом предположения. MATLAB не запускает тесты.
SetAccess | protected |
GetAccess | public |
Типы данных: логический
SupportsOrdering
— логический скаляр, чтобы управлять запуском <>, и т.дtrue
(значение по умолчанию) | false
Индикатор, что упорядоченное расположение поддержек класса в виде true
или false
. Класс, который поддерживает упорядоченное расположение, позволяет использование <
, >
, <=
, и >=
.
Если вы устанавливаете SupportsOrdering
к false
, ожидайте, что сопоставленные тесты будут отфильтрованы отказом предположения. MATLAB не запускает тесты.
SetAccess | protected |
GetAccess | public |
Типы данных: логический
UsableAsMissingIndicator
— Класс применим как индикатор отсутствующего значенияtrue
(значение по умолчанию) | false
Индикатор, что класс применим как индикатор отсутствующего значения к ismissing
функция в виде true
или false
.
Если вы устанавливаете UsableAsMissingIndicator
к false
, ожидайте, что сопоставленные тесты будут отфильтрованы отказом предположения. MATLAB не запускает тесты.
SetAccess | protected |
GetAccess | public |
Типы данных: логический
FillValue
— Значение для роста массиваMissingValue
свойство (значение по умолчанию) | допустимое скалярное значение MATLABЗначение заливки, которое ваш класс использует для роста массивов в виде допустимого скалярного значения MATLAB. По умолчанию, значение FillValue
совпадает со значением MissingValue
свойство.
Пример: 0
SetAccess | protected |
GetAccess | public |
Создайте 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
удовлетворить правилам равенства. Define 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.