matlab.unittest.constraints.Throws class

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

Указатель на функцию определения ограничения, который выдает MException

Описание

The Throws класс создает ограничение, которое выполняется только в том случае, если фактическое значение представляет собой указатель на функцию, выдающий определенное исключение.

Если функция выдает MException и ExpectedException свойство ограничения является идентификатором ошибки, отказ проверки происходит, если фактическое MException выданный имеет другой идентификатор. Альтернативно, если ExpectedException свойство является meta.classограничение не удовлетворяется, если фактическое MException брошенный не выводится из ExpectedException.

Конструкция

outConstObj = Throws(excep) предоставляет ограничение, outConstObj, указание указателя на функцию, который выдает конкретный MException, excep.

outConstObj = Throws(excep,Name,Value) предоставляет ограничение с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар.

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

excep

Идентификатор ошибки или meta.class представляет определенный тип ожидаемого исключения. Если excep является meta.class но не зависит от MException, а Throws конструктор выдает MException.

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

'CausedBy'

Ожидаемые причины, заданные как массив ячеек из векторов символов, строковых массивов или массива meta.class образцы.

Тестирование приводит к отказу проверки, если есть причины, указанные в CausedBy не найдены в дереве причин.

По умолчанию: {}

'WhenNargoutIs'

Количество выходов, которые должно запросить ограничение при вызове указателя на функцию, заданное как неотрицательное, действительное, скалярное целое число.

По умолчанию: 0

'RespectingSet'

Индикатор соответствия набору ожидаемых причин, указанный как false или true (logical 0 или 1). Когда это значение false, образец игнорирует дополнительные причины. Когда установлено значение trueобразец чувствителен к дополнительным причинам. A true значение означает, что ограничение не удовлетворяется, если ожидаемые исключения содержат причины, не указанные в 'CausedBy' Пара "имя-значение".

По умолчанию: 0

Свойства

ExpectedException

Ожидаемые MException идентификатор или класс. Установите это свойство только для чтения через конструктор через excep входной параметр.

Nargout

Количество выходных аргументов, которые образец использует при выполнении функций. Установите это свойство через конструктор через аргумент пары "имя-значение", 'WhenNargoutIs'.

RequiredCauses

Ожидаемые причины выдачи указателем на функцию MException. Установите это свойство через конструктор через аргумент пары "имя-значение", 'CausedBy'.

RespectSet

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

Копировать семантику

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.Throws

testCase = TestCase.forInteractiveUse;

Проверьте, что функция выдает указанный идентификатор ошибки.

testCase.verifyThat(@() error('SOME:error:id','Error!'), ...
    Throws('SOME:error:id'))
Interactive verification passed.

Проверьте, что функция выдает указанный класс исключения.

testCase.verifyThat(@() error('SOME:error:id','Error!'), ...
    Throws(?MException))
Interactive verification passed.

Проверьте, что функция при вызове с заданным количеством выходов выдает указанную ошибку.

testCase.verifyThat(@() disp('hi'), Throws('MATLAB:maxlhs', ...
    'WhenNargoutIs', 1))
Interactive verification passed.

Проверяйте причины по идентификатору.

me = MException('TOP:error:id','TopLevelError!');
causeBy1 = MException('causedBy:someOtherError:id','CausedByError!');
causeBy2 = MException('causedBy:yetAnotherError:id','AnotherCausedByError!');
me  = me.addCause(causeBy1);
me  = me.addCause(causeBy2);

testCase.verifyThat(@() me.throw, Throws('TOP:error:id','CausedBy',...
    {'causedBy:someOtherError:id'}))
Interactive verification passed.

Проверьте, что исключение не содержит никаких дополнительных причин, чем таковые, заданные 'CausedBy'.

testCase.verifyThat(@() me.throw, Throws('TOP:error:id','CausedBy',...
    {'causedBy:someOtherError:id'},'RespectingSet',true))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
Throws failed.
--> The following causes were unexpectedly found in the exception tree:
    --> 'causedBy:yetAnotherError:id'

Actual Error Report:
    Error using @()me.throw
    TopLevelError!
    
    Caused by:
        CausedByError!
        AnotherCausedByError!
    
Actual Error Structure:
    ?MException 'TOP:error:id'
    --> ?MException 'causedBy:someOtherError:id'
    --> ?MException 'causedBy:yetAnotherError:id'

Evaluated Function:
        @()me.throw

Проверяйте причины по классам.

me = MException('TOP:error:id','TopLevelError!');
causeBy = MException('causedBy:someOtherError:id','CausedByError!');
me = me.addCause(causeBy);
testCase.verifyThat(@() me.throw, Throws('TOP:error:id','CausedBy', ...
    ?MException))
Interactive verification passed.

Проверьте, что, если фактическое значение не является указателем на функцию, ограничение не выполняется.

testCase.fatalAssertThat(5, Throws('some:id'))
Interactive fatal assertion failed.

---------------------
Framework Diagnostic:
---------------------
Throws failed.
--> The value must be an instance of the expected type.
    
    Actual Class:
        double
    Expected Type:
        function_handle

Actual Value:
         5
Fatal assertion failed.

Проверьте, что если функция не выдает исключение, ограничение не выполняется.

testCase.assumeThat(@rand, Throws(?MException))
Interactive assumption failed.

---------------------
Framework Diagnostic:
---------------------
Throws failed.
--> The function did not throw any exception.
    
    Expected Exception:
        --> ?MException

Evaluated Function:
        @rand
Assumption failed.

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

testCase.verifyThat(@() error('SOME:id','Error!'), Throws('OTHER:id'))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
Throws failed.
--> The function threw the wrong exception.
    
    Actual Exception:
        'SOME:id'
    Expected Exception:
        'OTHER:id'

Actual Error Report:
    Error using @()error('SOME:id','Error!')
    Error!
    
Evaluated Function:
        @()error('SOME:id','Error!')

Проверьте, что если функция выдает исключение, а причина не соответствует указанному идентификатору, ограничение не выполняется.

testCase.verifyThat(@() error('TOP:error:id','TopLevelError!'), ...
    Throws('TOP:error:id','CausedBy',{'causedBy:someOtherError:id'}))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
Throws failed.
--> The following causes were not found in the exception tree:
    --> 'causedBy:someOtherError:id'

Actual Error Report:
    Error using @()error('TOP:error:id','TopLevelError!')
    TopLevelError!
    
Actual Error Structure:
    ?MException 'TOP:error:id'

Evaluated Function:
        @()error('TOP:error:id','TopLevelError!')
Введенный в R2013a