Main Content

모의 객체 동작 지정하기

모의 객체를 생성할 때, 모의 객체 동작을 제어하는 연결된 동작 객체도 생성합니다. 이 객체를 사용하여 모의 메서드와 속성 동작을 정의합니다(스텁). 모의 객체 생성에 대한 자세한 내용은 모의 객체 생성하기 항목을 참조하십시오.

모의 객체는 슈퍼클래스로 지정된 인터페이스의 추상 메서드와 속성을 구현한 것입니다. 슈퍼클래스 없이 모의 객체를 생성할 수도 있는데, 이 경우 모의 객체에 묵시적 인터페이스가 있습니다.

묵시적 인터페이스가 있는 모의 객체를 생성합니다. 이 인터페이스는 Name 속성 및 ID 속성과, 식별자를 받고 이름을 반환하는 findUser 메서드를 포함합니다. 이 인터페이스는 현재 구현되어 있지 않지만 이 인터페이스가 있는 모의 객체를 생성할 수 있습니다.

testCase = matlab.mock.TestCase.forInteractiveUse;
[mock,behaviorObj] = testCase.createMock('AddedProperties', ...
    {'Name','ID'},'AddedMethods',{'findUser'});

모의 메서드 동작 정의하기

다양한 상황에서 모의 메서드가 특정한 값을 반환하거나 예외를 발생시키도록 지정할 수 있습니다.

임의의 입력값을 사용하여 findUser 메서드가 호출될 경우 "Unknown"을 반환하도록 지정합니다. 기본적으로, MATLAB®은 사용자가 findUser 메서드를 호출할 경우 빈 배열을 반환합니다.

  • assignOutputsWhen 메서드는 메서드 호출에 대한 반환 값을 정의합니다.

  • 모의 메서드 호출(behaviorObj.findUser)은 MethodCallBehavior 객체를 암묵적으로 생성합니다.

  • MethodCallBehavior 객체의 withAnyInputs 메서드는 임의의 값을 가진 임의 개수의 입력값을 사용하는 메서드 호출에 동작이 적용되도록 지정합니다.

testCase.assignOutputsWhen(withAnyInputs(behaviorObj.findUser),"Unknown")
n = mock.findUser(1)
n = 

    "Unknown"

입력값이 1701일 때 모의 메서드가 "Jim"을 반환하도록 지정합니다. 이 동작은 기존의 지정 이후에 정의되었기 때문에 입력값이 1701일 때에는 "Unknown" 반환을 대체합니다.

testCase.assignOutputsWhen(behaviorObj.findUser(1701),"Jim")
n = mock.findUser(1701)
n = 

    "Jim"

해당 객체만 입력값으로 사용하여 findUser 메서드를 호출할 때 모의 메서드가 "Unspecified ID"를 반환하도록 지정합니다. MethodCallBehavior 객체의 withExactInputs 메서드는 이 동작이 해당 객체만 입력값으로 사용하는 메서드 호출에 적용되도록 지정합니다.

testCase.assignOutputsWhen(withExactInputs(behaviorObj.findUser), ...
    "Unspecified ID")
n = mock.findUser  % equivalent to n = findUser(mock)
n = 

    "Unspecified ID"

동작을 정의하는 데 도움이 되도록 matlab.unittest.constraints 네임스페이스에 있는 클래스를 사용할 수 있습니다. findUser가 5000보다 큰 ID로 호출될 때 예외가 발생하도록 지정합니다.

import matlab.unittest.constraints.IsGreaterThan
testCase.throwExceptionWhen(behaviorObj.findUser(IsGreaterThan(5000)));
n = mock.findUser(5001)
Error using
matlab.mock.internal.MockContext/createMockObject/mockMethodCallback (line 323)
The following method call was specified to throw an exception:
	   findUser([1×1 matlab.mock.classes.Mock], 5001)

메서드 호출에서 요청된 출력값 개수를 기준으로 동작을 정의할 수 있습니다. 메서드 호출이 두 개의 출력값을 요청하는 경우 이름에 대해 "??"를 반환하고 ID에 대해 -1을 반환합니다.

testCase.assignOutputsWhen(withNargout(2, ...
    withAnyInputs(behaviorObj.findUser)),"??",-1)
[n,id] = mock.findUser(13)
n = 

    "??"


id =

    -1

모의 속성 동작 정의하기

모의 속성에 액세스할 경우 특정한 속성값이나 저장된 속성값이 반환되도록 지정할 수 있습니다. 이렇게 설정되어 있으면 모의 객체가 속성값을 저장하는 시기를 지정할 수 있습니다. 또한, 테스트 프레임워크가 모의 속성 설정이나 액세스 작업에 대해 예외를 발생시키는 시기를 정의할 수도 있습니다.

모의 속성 동작을 정의할 때, 명령 창에 속성값을 표시하는 것은 속성 액세스(즉, get) 작업이라는 점에 유의하십시오.

모의 메서드 동작을 정의하는 것과 유사하게, 모의 속성 동작을 정의하려면 PropertyBehavior 클래스의 인스턴스가 필요합니다. 모의 속성에 액세스할 경우 프레임워크는 이 클래스의 인스턴스를 반환합니다. 액세스 동작을 정의하려면 PropertyBehavior 클래스의 get 메서드를 호출하여 PropertyGetBehavior의 인스턴스를 사용하십시오. set 동작을 정의하려면 PropertyBehavior 클래스의 set 메서드 또는 setToValue 메서드를 호출하여 PropertySetBehavior의 인스턴스를 사용하십시오.

Name 속성이 임의 값으로 설정될 경우 테스트 프레임워크가 예외를 발생시키도록 지정합니다.

  • throwExceptionWhen 메서드는 프레임워크가 지정된 동작에 대해 예외를 발생시키도록 지시합니다.

  • 동작 객체 PropertyBehavior 클래스(behaviorObj.Name)의 속성에 액세스하면 PropertyBehavior 클래스 인스턴스가 생성됩니다.

  • PropertyBehavior 클래스의 set 메서드를 호출하면 PropertySetBehavior가 생성됩니다.

testCase.throwExceptionWhen(set(behaviorObj.Name))
mock.Name = "Sue";
Error using matlab.mock.internal.MockContext/createMockObject/mockPropertySetCallback (line 368)
The following property set was specified to throw an exception:
		<Mock>.Name = "Sue"

속성이 "David"로 설정된 경우 모의 객체가 값을 저장하도록 합니다.

testCase.storeValueWhen(setToValue(behaviorObj.Name,"David"));
mock.Name = "David"
mock = 

  Mock with properties:

    Name: "David"
      ID: []

반복 동작과 후속 동작 정의하기

matlab.mock.TestCase 메서드를 사용하면 동작을 간편하게 정의할 수 있습니다. 그러나 matlab.mock.actions 네임스페이스에 있는 클래스를 사용할 경우 더 많은 기능이 제공됩니다. 이러한 클래스를 사용하여, 같은 동작을 여러 차례 반복하는 동작을 정의하고 후속 동작을 지정할 수 있습니다. 반복 동작이나 후속 동작을 정의하려면 matlab.mock.actions 네임스페이스에 있는 클래스의 인스턴스를 동작 클래스의 when 메서드로 전달하십시오.

ID 속성에 값 1138을 할당한 후 속성 액세스에 대해 예외를 발생시킵니다.

import matlab.mock.actions.AssignOutputs
import matlab.mock.actions.ThrowException
when(get(behaviorObj.ID),then(AssignOutputs(1138),ThrowException))
id = mock.ID
id = mock.ID
id =

        1138

Error using matlab.mock.internal.MockContext/createMockObject/mockPropertyGetCallback (line 346)
The following property access was specified to throw an exception:
   <Mock>.ID

ID 속성에 값 1138을 할당한 다음 값 237을 할당합니다. 그런 다음, 속성 액세스에 대해 예외를 발생시킵니다. then 메서드를 호출할 때마다 최대 두 개의 동작이 허용됩니다. 더 많은 후속 동작을 지정하려면 then을 여러 번 호출하십시오.

when(get(behaviorObj.ID),then(AssignOutputs(1138), ...
    then(AssignOutputs(237),ThrowException)))
id = mock.ID
id = mock.ID
id = mock.ID
id =

        1138


id =

   237

Error using matlab.mock.internal.MockContext/createMockObject/mockPropertyGetCallback (line 346)
The following property access was specified to throw an exception:
   <Mock>.ID

해당 객체가 유일한 입력값인 경우 findUser 함수가 "Phil"의 값을 두 번 반환하도록 지정합니다.

when(withExactInputs(behaviorObj.findUser),repeat(2,AssignOutputs("Phil")))
n = mock.findUser
n = mock.findUser
n = 

    "Phil"


n = 

    "Phil"

이 함수를 세 번째로 호출합니다. 한 동작을 반복하고 뒤에 then 메서드를 호출하지 않으면 모의 객체는 반복된 값을 계속 반환합니다.

n = mock.findUser
n = 

    "Phil"

Name의 값을 설정하기 위한 동작을 정의합니다. 처음 두 번은 예외를 발생시킨 다음 값을 저장합니다.

import matlab.mock.actions.StoreValue
when(set(behaviorObj.Name),then(repeat(2,ThrowException),StoreValue))
mock.Name = "John"
Error using matlab.mock.internal.MockContext/createMockObject/mockPropertySetCallback (line 368)
The following property set was specified to throw an exception:
    <Mock>.Name = "John"
mock.Name = "Penny"
Error using matlab.mock.internal.MockContext/createMockObject/mockPropertySetCallback (line 368)
The following property set was specified to throw an exception:
    <Mock>.Name = "Penny"
mock.Name = "Tommy"
mock = 

  Mock with properties:

    Name: "Tommy"

동작 요약

동작TestCase 메서드matlab.mock.Actions 클래스(반복 동작과 후속 동작의 정의 가능)
메서드 호출과 속성 액세스에 대해 지정된 값을 반환합니다.assignOutputsWhenAssignOutputs
속성에 액세스할 경우 저장된 값을 반환합니다.returnStoredValueWhenReturnStoredValue
속성이 설정될 경우 값을 저장합니다.storeValueWhenStoreValue
메서드가 호출되거나 속성이 설정 또는 액세스될 경우 예외를 발생시킵니다.throwExceptionWhenThrowException

참고 항목

클래스

관련 항목