이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

matlab.unittest.constraints.Throws 클래스

패키지: matlab.unittest.constraints
슈퍼클래스: matlab.unittest.constraints.Constraint

MException을 발생시키는 함수 핸들을 규정하는 제약 조건

설명

Throws 클래스는 실제 값이 특정 예외를 발생시키는 함수 핸들인 경우에만 충족되는 제약 조건을 만듭니다.

함수가 MException을 발생시키고 제약 조건의 ExpectedException 속성이 오류 ID인 경우, 내보낸 실제 MException이 다른 식별자이면 가설 검정(Qualification)이 실패합니다. 또는 ExpectedException 속성이 meta.class인 경우, 이 제약 조건은 발생한 실제 MExceptionExpectedException에서 파생되지 않은 경우 충족되지 않습니다.

생성

outConstObj = Throws(excep)은 특정 MException, excep을 발생시키는 함수 핸들을 규정하는 제약 조건 outConstObj를 제공합니다.

outConstObj = Throws(excep,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션이 있는 제약 조건을 제공합니다.

입력 인수

excep

예상 예외의 특정 유형을 나타내는 오류 ID 또는 meta.class입니다. excepmeta.class이지만 MException에서 파생되지 않은 경우, Throws 생성자는 MException을 발생시킵니다.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

'CausedBy'

예상 원인으로, 문자형 벡터로 구성된 셀형 배열 또는 meta.class 인스턴스로 구성된 배열로 지정됩니다.

CausedBy에 지정된 원인을 원인 트리 내에서 찾을 수 없는 경우 테스트 결과는 가설 검정(Qualification) 실패가 됩니다.

디폴트 값: {}

'WhenNargoutIs'

함수 핸들을 불러올 때 제약 조건이 요구하는 출력값의 개수로, 음이 아닌 실수형 정수 스칼라로 지정됩니다.

디폴트 값: 0

'RespectingSet'

예상되는 원인을 고려할지 여부를 나타내는 표시로, falsetrue(logical0 또는 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.

함수가 지정되지 않은 오류 ID를 발생시키면 제약 조건이 충족되지 않음을 확인합니다.

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에 개발됨