Определение поведения фиктивного объекта

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

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

Создайте макет с неявным интерфейсом. Интерфейс включает 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, ложный метод возвращает "Jim". Это поведение заменяет возврат "Unknown" для входного значения 1 701 только потому, что это было задано после той спецификации.

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

    "Jim"

Задайте это когда findUser метод вызван только объектом, как введено, ложный метод возвращает "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 выдает исключение, когда оно вызвано ID, больше, чем 5 000.

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 для ID.

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 метод класса поведения.

Присвойте значение 1 138 к свойству 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

Присвойте значение 1 138 и затем 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

Смотрите также

| | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте