在Go lang中一次又一次地模拟具有不同响应的相同功能

时间:2018-06-25 18:12:53

标签: unit-testing go mocking

first := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResponse, nil)
mockClient.EXPECT().Do(gomock.Any()).Return(defaultResp, nil).After(first)

我怎样才能多次调用这两个模拟?这是调用模拟的正确方法吗?我需要先执行第一个模拟,然后再执行第二个模拟客户端。所以我遵循了这种方法。但是我需要在我的UNIT测试中称呼它们为一系列测试输入,每一次都应该在第一个执行,然后在第二个执行。但是我看到这种情况只发生了一次,而下一次只发生了第二次。

1 个答案:

答案 0 :(得分:2)

gomock软件包提供了许多订购方法。

示例前的注释:使用给定的示例,一旦first被调用一次,并返回其值。它将被标记为“已使用”和“已完成”,不再考虑。

如果发生这种情况,您将需要重新设置期望值。

从文档中

  

默认情况下,不强制要求的调用以任何特定顺序运行。可以通过使用InOrder和/或Call.After强制执行呼叫顺序依赖性。 Call.After可以创建更多不同的呼叫顺序依赖性,但是InOrder通常更方便。

Link

订购模拟的两种选择

订购单独的模拟游戏

first := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResponse, nil)
second := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResp, nil)

gomock.InOrder(
    first,
    second,
)

看到模拟接受完全相同的参数,就可以设置...

同一模拟有多个返回结果

mockClient.EXPECT().
    Do(gomock.Any()).
    Return(defaultResponse, nil).
    Return(defaultResp, nil)