exponenta event banner

Задать поведение имитационного объекта

При создании макета создается связанный объект поведения, который управляет макетом поведения. Этот объект используется для определения имитационного метода и поведения свойства (заглушки). Дополнительные сведения о создании макета см. в разделе Создание макетного объекта.

Объект mock является реализацией абстрактных методов и свойств интерфейса, заданных суперклассом. Можно также создать макет без суперкласса, в этом случае макет имеет неявный интерфейс.

Создайте макет с неявным интерфейсом. Интерфейс включает в себя 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 объект.

  • withAnyInputs способ MethodCallBehavior объект указывает, что поведение применяется к вызову метода с любым количеством входов с любым значением.

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

    "Unknown"

Укажите, что если входное значение равно 1701, метод mock возвращает "Jim". Это поведение заменяет возврат "Unknown" для входного значения 1701 только потому, что оно было определено после этой спецификации.

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

    "Jim"

Укажите, что, когда findUser вызывается только с объектом в качестве ввода, метод mock возвращает "Unspecified ID". withExactInputs способ MethodCallBehavior объект указывает, что поведение применяется к вызову метода с объектом в качестве единственного входного значения.

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

    "Unspecified ID"

Можно использовать классы в matlab.unittest.constraints для определения поведения. Укажите, что findUser создает исключение при вызове с идентификатором более 5000.

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)

Поведение можно определить на основе количества выходных данных, запрошенных при вызове метода. Если вызов метода запрашивает два выходных значения, возвращайте "??" для имени и -1 для идентификатора.

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

    "??"


id =

    -1

Определение поведения имитационного свойства

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

При определении поведения имитационного свойства помните, что отображение значения свойства в окне команды является операцией доступа к свойству (get).

Подобно определению поведения метода макета, для определения поведения свойства макета требуется экземпляр PropertyBehavior класс. Фреймворк возвращает экземпляр этого класса при доступе к имитационному свойству. Чтобы определить поведение доступа, используйте экземпляр PropertyGetBehavior путем вызова get способ PropertyBehavior класс. Чтобы определить поведение набора, используйте экземпляр PropertySetBehavior путем вызова set или setToValue способ PropertyBehavior класс.

Укажите, что, когда Name свойство имеет любое значение, при этом в среде тестирования создается исключение.

  • throwExceptionWhen метод предписывает инфраструктуре создать исключение для указанного поведения.

  • Доступ к свойству объекта поведения PropertyBehavior класс (behaviorObj.Name) создает PropertyBehavior экземпляр класса.

  • Вызов set способ PropertyBehavior класс создает 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

См. также

| | | |

Связанные темы