Когда вы создаете макет, вы создаете связанный объект поведения, который управляет поведением 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 Класс (позволяет определять повторение и последующее поведение) |
---|---|---|
Возвращает заданные значения для вызова метода и доступа к свойствам. | assignOutputsWhen | AssignOutputs |
Возвращает сохраненное значение при доступе к свойству. | returnStoredValueWhen | ReturnStoredValue |
Сохраните значение, когда задано свойство. | storeValueWhen | StoreValue |
Выдать исключение, когда вызывается метод или когда задано или получен доступ к свойству. | throwExceptionWhen | ThrowException |
matlab.mock.actions.AssignOutputs
| matlab.mock.actions.ReturnStoredValue
| matlab.mock.actions.StoreValue
| matlab.mock.actions.ThrowException
| matlab.mock.TestCase