将此代码放在外部 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% 的代码覆盖率。对我来说,模拟第三方方法是最简单的,这样我就可以检测我选择用于分支测试的任何返回。
我认为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)
}
}