主要内容

指定模拟对象行为

在创建模拟时,您将创建控制模拟行为的关联行为对象。使用此对象定义模拟方法和属性行为(存根).有关创建模拟的详细信息,请参见创建模拟对象

模拟对象是超类指定的接口的抽象方法和属性的实现。您还可以构造一个没有超类的模拟,在这种情况下,模拟具有隐式接口。

使用隐式接口创建一个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

另请参阅

||||

相关话题