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