在创建模拟时,您将创建控制模拟行为的关联行为对象。使用此对象定义模拟方法和属性行为(存根).有关创建模拟的详细信息,请参见创建模拟对象.
模拟对象是超类指定的接口的抽象方法和属性的实现。您还可以构造一个没有超类的模拟,在这种情况下,模拟具有隐式接口。
使用隐式接口创建一个mock。接口包括的名字
和ID
属性和一个findUser
方法,该方法接受标识符并返回名称。虽然接口目前还没有实现,但您可以使用它创建一个mock。
testCase = matlab.mock.TestCase.forInteractiveUse;[模拟,behaviorObj] = testCase.createMock (“AddedProperties”,...{“名字”,“ID”},“AddedMethods”,{“findUser”});
您可以指定一个模拟方法在不同的情况下返回特定的值或抛出异常。
指定当findUser
方法在任何输入时调用,它将返回“未知”
.默认情况下,MATLAB®调用时返回一个空数组findUser
方法。
的assignOutputsWhen
方法定义方法调用的返回值。
模拟的方法调用(behaviorObj.findUser
)隐式创建MethodCallBehavior
对象。
的withAnyInputs
的方法MethodCallBehavior
对象指定该行为应用于具有任意数量和任意值的输入的方法调用。
testCase.assignOutputsWhen (withAnyInputs (behaviorObj.findUser),“未知”) n = mock.findUser(1)
n =“未知”
指定当输入值为1701时,模拟方法将返回“吉姆”
.这个行为取代了返回“未知”
对于输入值1701,因为它是在该规范之后定义的。
testCase.assignOutputsWhen (behaviorObj.findUser (1701),“吉姆”) n = mock.findUser(1701)
n = "吉姆"
指定当findUser
方法调用时仅将对象作为输入,则模拟方法将返回“未指定的ID”
.的withExactInputs
的方法MethodCallBehavior
对象指定该行为应用于以该对象作为唯一输入值的方法调用。
testCase.assignOutputsWhen (withExactInputs (behaviorObj.findUser),...“未指定的ID”)n = mock.finduser%相同于n = finduser(模拟)
n = "未指定ID"
中可以使用类matlab.unittest.constraints
包来帮助定义行为。指定findUser
当调用ID大于5000时抛出异常。
进口matlab.unittest.constraints.IsGreaterThantestCase.throwExceptionWhen (behaviorObj.findUser (IsGreaterThan (5000)));n = mock.findUser (5001)
下面的方法调用被指定为抛出异常:模拟),5001)
您可以根据方法调用中请求的输出数量定义行为。如果方法调用请求两个输出值,则返回“? ?”
为名称,-1为ID。
testCase.assignOutputsWhen (withNargout (2...withAnyInputs (behaviorObj.findUser)),“? ?”,-1) [n,id] = mock.findUser(13)
N = "??" id = -1
当访问模拟属性时,可以指定它返回特定的或存储的属性值。设置后,可以指定模拟存储属性值的时间。您还可以定义测试框架何时为模拟属性集或访问活动抛出异常。
在定义模拟属性行为时,请记住在命令窗口中显示属性值是一个属性访问(get)操作。
与定义模拟方法行为类似,定义模拟属性行为需要PropertyBehavior
类。当您访问mock属性时,框架将返回该类的实例。要定义访问行为,请使用的实例PropertyGetBehavior
通过调用得到
的方法PropertyBehavior
类。方法的实例可定义设置行为propertysetbehavior.
通过调用集
或setToValue
的方法PropertyBehavior
类。
指定当的名字
属性设置为任意值时,测试框架将抛出异常。
的throwExceptionWhen
方法指示框架为指定的行为抛出异常。
访问行为对象的属性PropertyBehavior
类(behaviorObj。的名字
)创建一个PropertyBehavior
类实例。
召唤集
的方法PropertyBehavior
类创建一个propertysetbehavior.
.
testCase.throwExceptionWhen(设置(behaviorObj.Name))模拟。Name =“苏”;
. Mock>. Mock>. Mock>. Mock>. Mock>. MockName = "苏"
当属性设置为时,允许模拟存储该值“大卫”
.
testCase.storeValueWhen (setToValue (behaviorObj.Name,“大卫”));模拟。的名字=“大卫”
使用属性mock = mock: Name: "David" ID: []
的matlab.mock.TestCase
方法便于定义行为。但是,当您在matlab.mock.actions
包。使用这些类,您可以定义多次重复相同操作的行为,并指定后续操作。属性中传递类的实例,以定义重复或后续行为matlab.mock.actions
包的当
方法。
将值1138赋给ID属性,然后为属性访问抛出异常。
进口matlab.mock.actions.AssignOutputs进口matlab.mock.actions.ThrowException当(get(behaviorObj.ID),然后(AssignOutputs(1138),ThrowException)) id = mock。ID ID = mock。ID
使用matlab.mock.internal.MockContext/createMockObject/mockPropertyGetCallback(第346行)时出错。ID
将值1138和237分配给ID属性。然后,为属性访问抛出异常。每次呼叫然后
方法最多接受两个操作。要指定更多的后续操作,请使用多个调用然后
.
当((behaviorObj.ID),那么(AssignOutputs (1138),...然后(AssignOutputs(237),ThrowException))) id = mock。ID ID = mock。ID ID = mock。ID
使用matlab.mock.internal.MockContext/createMockObject/mockPropertyGetCallback(第346行)时出错。ID
如果该对象是唯一的输入值,则指定findUser
函数返回值“菲尔”
两次。
当(withExactInputs (behaviorObj.findUser)重复(2,AssignOutputs (“菲尔”n =嘲笑。findUsern = mock.findUser
n = "Phil"
第三次调用该函数。如果你重复一个动作,而没有在它之后呼叫然后
方法时,模拟将继续返回重复的值。
n = mock.findUser
n =“菲尔”
定义设置值的行为的名字
.前两次抛出异常,然后存储该值。
进口matlab.mock.actions.StoreValue当(设置(behaviorObj.Name),那么(重复(2,ThrowException) StoreValue))模拟。Name =“约翰。”
. Mock>. Mock>. Mock>. Mock>. Mock>. MockName = "约翰"
模拟。的名字=“一分钱”
. Mock>. Mock>. Mock>. Mock>. Mock>. MockName = "钱"
模拟。的名字=“汤米”
名称:“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