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

Типы данных: логический

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

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

Атрибуты:

SetAccess
protected
GetAccess
public

Типы данных: логический

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

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

Атрибуты:

SetAccess
protected
GetAccess
public

Типы данных: логический

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

Больше о

развернуть все

Смотрите также

| |

Введенный в R2018b