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

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

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

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

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

| | | |

Похожие темы