模拟外部Golang模块中定义的方法

问题描述 投票:0回答:1

将此代码放在外部 Go 文件/模块中:

type ErrorHandler = func(*ExternalContext) error

type Config struct {
    errorHandler: ErrorHandler
}

type ExternalContext struct {
...
}

func (e *ExternalContext) ExternalFuncOne() some_return {
    ...
}

func (e *ExternalContext) SendStatus (status int) error {
    ...
}

我的代码:

func errorCallback(ctx *ExternalContext) error {
    ...
    some logic
    ...
    result = ctx.ExternalFuncOne()
    if result == 2 {
        some logic
    } else if result == 3 {
        some different logic
    }
    return ctx.SendStatus(some_variable)
}

main() {
    // Call the external module's new struct creation function.
    ExternalNew {
        Config {
            ErrorCallback: errorCallback
        }
    }
}

基于示例代码块,如何在单元测试中模拟“ExternalFuncOne”和“SendStatus”方法? 我在一家医疗设备公司工作,我必须实现接近 100% 的代码覆盖率。对我来说,模拟第三方方法是最简单的,这样我就可以检测我选择用于分支测试的任何返回。

unit-testing go mocking
1个回答
0
投票

我认为xgo正是针对这种场景而创建的。 检查 https://github.com/xhd2015/xgo 了解更多详细信息。 至于你的问题,解决方案如下:

func errorCallback(ctx *ExternalContext) error {
    setupMock(ctx)
    ....
}

func setupMock(ctx *ExternalContext){
     mock.Mock(ctx.ExternalFuncOne,func(...,results){
        results.GetFieldIndex(0).Set(1)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.