Задайте поведение объекта макета

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

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

Создайте мок с неявным интерфейсом. Интерфейс включает в себя Name и ID свойства и findUser метод, который принимает идентификатор и возвращает имя. Пока интерфейс в данный момент не реализован, с ним можно создать макет.

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

Задайте поведение мока-метода

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

Задайте, что когда findUser вызывается метод с любыми входами, он возвращает "Unknown". По умолчанию MATLAB® возвращает пустой массив при вызове findUser способ.

  • The assignOutputsWhen метод задает возвращаемые значения для вызова метода.

  • Вызов mocked метода (behaviorObj.findUser) неявно создает MethodCallBehavior объект.

  • The 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". The 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

Задайте поведение свойства мока

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

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

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

Задайте, что когда Name для свойства задано любое значение, среда тестирования выдает исключение.

  • The 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: []

Задайте повторяющееся и последующее поведение

The matlab.mock.TestCase методы удобны для определения поведения. Однако существует больше функциональности, когда вы используете класс в matlab.mock.actions вместо этого упаковать. Используя эти классы, можно задать поведение, которое повторяет одно и то же действие несколько раз и задавать последующие действия. Чтобы задать повторяющееся или последующее поведение, передайте образец класса в matlab.mock.actions упаковать в when метод класса поведения.

Присвойте значение 1138 свойству ID, а затем выдайте исключение для доступа к свойству.

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

Присвойте значение 1138 и затем 237 свойству ID. Затем выдайте исключение для доступа к свойствам. Каждый вызов на 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

См. также

| | | |

Похожие темы