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