【问题标题】:Mocking same functions with different response many times one after the other in Go lang在 Go 语言中一个接一个地多次模拟具有不同响应的相同功能
【发布时间】:2018-06-25 18:12:53
【问题描述】:
first := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResponse, nil)
mockClient.EXPECT().Do(gomock.Any()).Return(defaultResp, nil).After(first)

如何多次调用这两个模拟?这是调用模拟的正确方法吗?我需要先执行第一个模拟,然后执行第二个模拟客户端。所以我遵循了这种方法。但是我需要在我的单元测试中调用它们以进行一系列测试输入。每次第一个应该首先执行,然后第二个应该执行。但我看到这种情况只发生了一次,下一次只调用第二个。

【问题讨论】:

    标签: unit-testing go mocking


    【解决方案1】:

    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)
    

    【讨论】:

    • "在同一个模拟中多次返回。"对我不起作用。它不断返回最后一个以进行多次调用
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多