matlab.unittest.constraints.Throws class

Пакет: 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 логический0 или 1). Когда этим значением является false, экземпляр игнорирует дополнительные причины. Когда установлено в true, экземпляр чувствителен к дополнительным причинам. 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;

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

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