matlab.unittest.constraints. Класс бросков

Пакет: 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

'CausedBy'

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

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

Значение по умолчанию: {}

'WhenNargoutIs'

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

Значение по умолчанию: 0

'RespectingSet'

Индикатор, уважать ли набор ожидаемых причин, заданных как false или true (logical 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