Main Content

verifyCalled

클래스: matlab.mock.TestCase
네임스페이스: matlab.mock

메서드가 특정 입력값으로 호출되었음을 확인

설명

예제

verifyCalled(testcase,behavior)는 메서드가 특정 입력값으로 호출되었음을 확인합니다.

예제

verifyCalled(testcase,behavior,diagnostic)은 또한 diagnostic의 진단 정보를 가설 검정에 연결합니다. 테스트 실행기 구성에 따라 테스트 프레임워크는 가설 검정이 통과 또는 실패일 때 진단을 표시할 수 있습니다. 기본적으로 프레임워크는 가설 검정이 실패일 때만 진단을 표시합니다. 테스트 실행기를 사용자 지정하여 디폴트 동작을 재정의할 수 있습니다. 예를 들어, DiagnosticsOutputPlugin 인스턴스를 사용하여 실패 및 통과 이벤트 진단을 모두 표시합니다.

입력 인수

모두 확장

테스트 케이스의 인스턴스로, matlab.mock.TestCase 객체로 지정됩니다.

모의 객체의 동작으로, matlab.mock.MethodCallBehavior 인스턴스로 지정됩니다. matlab.mock.MethodCallBehavior의 인스턴스를 만들려면 해당 동작 객체의 메서드를 호출합니다.

예: withExactInputs(myMockBehavior.myMockedMethod)

표시할 진단 정보로, string형 배열, 문자형 배열, 함수 핸들 또는 matlab.automation.diagnostics.Diagnostic 객체로 지정됩니다. 진단 값은 비 스칼라일 수 있습니다. 자세한 내용은 matlab.automation.diagnostics.Diagnostic 항목을 참조하십시오.

예: "My diagnostic message."

예: @() datetime('now')

예제

모두 확장

대화형 방식으로 사용하기 위한 묵시적 인터페이스가 있는 모의 객체를 생성합니다. 이 인터페이스는 foo 메서드와 bar 메서드를 포함합니다. 입력값을 지정하여 foo를 호출합니다.

testCase = matlab.mock.TestCase.forInteractiveUse;
[mock,behavior] = testCase.createMock('AddedMethods',["foo","bar"]);
mock.foo(123);

foo가 입력값 123으로 호출되었음을 확인합니다.

testCase.verifyCalled(behavior.foo(123));
Verification passed.

대화형 방식으로 사용하기 위한 묵시적 인터페이스가 있는 모의 객체를 생성합니다. 이 인터페이스는 foo 메서드와 bar 메서드를 포함합니다. 입력값을 지정하여 foo를 호출합니다.

testCase = matlab.mock.TestCase.forInteractiveUse;
[mock,behavior] = testCase.createMock('AddedMethods',["foo","bar"]);
mock.foo(123);

foo가 입력값 456으로 호출되었음을 확인합니다. 실패 시 진단 정보를 표시합니다.

testCase.verifyCalled(behavior.foo(456), ...
    'Method foo should have been called with input 456.');
Verification failed.
    ----------------
    Test Diagnostic:
    ----------------
    Method foo should have been called with input 456.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyCalled failed.
    --> Method 'foo' was not called with the specified signature.
    --> All observed method call(s) with any signature are:
            foo([1×1 matlab.mock.classes.Mock], 123)
    
    Specified method call:
    MethodCallBehavior
        [...] = foo(<Mock>, 456)

bar가 이 객체만을 입력값으로 하여 한 번 이상 호출되었음을 확인합니다.

testCase.verifyCalled(withExactInputs(behavior.bar), ...
    'Method bar should have been called.');
Verification failed.
    ----------------
    Test Diagnostic:
    ----------------
    Method bar should have been called.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyCalled failed.
    --> Method 'bar' was never called.
    
    Specified method call:
    MethodCallBehavior
        [...] = bar(<Mock>)

예외를 발생시키지 않으면서 실패를 생성하고 기록하려면 확인 가설 검정을 사용하십시오. 검증은 예외를 발생시키지 않으므로, 검증 실패가 발생하는 경우에도 모든 테스트 콘텐츠가 완료될 때까지 실행됩니다. 일반적으로 테스트를 조기에 종료할 필요가 없기 때문에 검증(Verification)은 단위 테스트에서 우선적으로 사용되는 가설 검정 유형입니다. 사전 조건 위반 또는 잘못된 테스트 설정을 테스트하려면 다른 가설 검정 유형을 사용하십시오.

  • 테스트 환경이 다른 방식으로는 테스트 실패로 이어지지 않는 사전 조건을 충족시키도록 하려면 가정(Assumption) 가설 검정을 사용하십시오. 가정에 실패한 테스트가 따로 걸러지고, 테스트 프레임워크는 이런 테스트를 Incomplete로 표시합니다.

  • 실패 조건이 현재 남은 테스트 콘텐츠를 무효화하지만, 후속 테스트 메서드의 정상적인 실행을 방해하지 않는 경우 어설션 가설 검정(Assertion Qualification)을 사용하십시오. 어설션 지점에서 실패할 경우 현재 테스트 메서드가 실패, 미완료 상태로 표시됩니다.

  • 실패 시 테스트 세션을 중단하려면 치명적 어설션(Fatal Assertion) 가설 검정을 사용하십시오. 이러한 가설 검정은 실패 모드가 매우 주요한 사안이라 테스트를 계속할 이유가 없는 경우에 유용합니다. 또한, 픽스처(Fixture) 해제를 수행해도 MATLAB® 상태가 올바르게 복원되지 않으며 테스트를 중단하고 새 세션을 시작하는 것이 더 나은 경우에도 유용합니다.

대안

verifyCalled 메서드를 사용하는 것은 Verifiable 클래스의 verifyThat 메서드와 함께 matlab.mock.constraints.WasCalled 제약 조건을 사용하는 것과 기능적으로 동일합니다. 예를 들어, 다음 코드 블록들은 기능적으로 동일합니다.

% Using the verifyCalled method
testCase.verifyCalled(behavior.foo(123), ...
    'Method foo should have been called with input 123.')

% Using the WasCalled constraint with verifyThat method
import matlab.mock.constraints.WasCalled;
testCase.verifyThat(behavior.foo(123),WasCalled, ...
    'Method foo should have been called with input 123.');
그러나 WasCalled 제약 조건을 사용하면 추가적인 기능을 사용할 수 있습니다. 예를 들어, 메서드가 특정 횟수로 호출되었음을 지정할 수 있습니다.

버전 내역

R2017a에 개발됨