matlab.test.behavior.Missing class

Пакет: 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 блок вашего тестового класса.

Отсутствующее значение для тестируемого класса, заданное как допустимое скалярное значение MATLAB или выражение, возвращающее неотсутствующее значение.

Пример: NaN или missing или ' '

Атрибуты:

SetAccess
public
GetAccess
public
Abstract
true

Любое неотсутствующее значение для тестируемого класса, заданное как допустимое скалярное значение MATLAB или выражение, которое возвращает неотсутствующее значение. Обычно, если конструктор классов возвращает неотсутствующее значение, PrototypeValue - вызов конструктора.

Пример: 0 или datetime

Атрибуты:

SetAccess
public
GetAccess
public
Abstract
true

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

Если можно преобразовать в другой класс, а затем вернуться в класс, то ваш класс имеет поддерживаемое преобразование из другого класса. Для примера, если MyClass(OtherClass(missing)) == MyClass(missing) чем OtherClass - класс с поддерживаемыми преобразованиями.

Пример: "string" или ["double","single"]

Атрибуты:

SetAccess
public
GetAccess
public
Abstract
true

Типы данных: string

При необходимости переопределите значения свойств бетона в функции TestClassSetup блок методов вашего тестового класса.

Индикатор того, что класс поддерживает сравнение, задается как true или false. Класс, который поддерживает сравнения, позволяет использовать == и ~=.

Если вы задаете SupportsComparison на false, ожидайте, что сравнение и упорядочивание тестов будут фильтроваться по отказу допущений. MATLAB не запускает тесты.

Атрибуты:

SetAccess
protected
GetAccess
public

Типы данных: logical

Индикатор того, что класс поддерживает упорядоченное расположение, задается как true или false. Класс, поддерживающий упорядоченное расположение, позволяет использовать <, >, <=, и >=.

Если вы задаете SupportsOrdering на false, ожидать фильтрации связанных тестов по отказу допущений. MATLAB не запускает тесты.

Атрибуты:

SetAccess
protected
GetAccess
public

Типы данных: logical

Индикатор того, что класс может использоваться как индикатор отсутствующего значения для ismissing функция, заданная как true или false.

Если вы задаете UsableAsMissingIndicator на false, ожидать фильтрации связанных тестов по отказу допущений. MATLAB не запускает тесты.

Атрибуты:

SetAccess
protected
GetAccess
public

Типы данных: logical

Значение заливки, используемое вашим классом для растущих массивов, задается как допустимое скалярное значение 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 чтобы удовлетворить правилам равенства. Определить 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
__________

Подробнее о

расширить все

Введенный в R2018b