exponenta event banner

matlab.unittest.constraints.Throws класс

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

Дескриптор функции, указывающий ограничение, который вызывает MException

Описание

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'.

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

Ручка. Сведения о том, как классы обработки влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

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

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