function - Golang 函数测试

标签 function unit-testing go

我正在使用第三方库,它是一些 C 函数的包装器。不幸的是,几乎所有的 Go 函数都是免费的(它们没有接收器,它们不是方法);不是我会采用的设计方法,但它就是我所拥有的。

仅使用 Go 的标准“测试”库:

是否有一种解决方案允许我创建可以模拟函数的测试?

或者是将库包装成结构和接口(interface),然后模拟接口(interface)来实现我的目标的解决方案?


我创建了一个蒙特卡洛模拟,它也处理生成的数据集。我的一种评估算法会寻找特定模型,然后将其传递给第三方函数进行评估。我知道我的边缘情况并且知道调用计数应该是多少,这就是我想要测试的。

也许只需要一个简单的计数器?


我发现使用这个库的其他项目没有完全覆盖或根本没有测试。

最佳答案

您可以通过在需要调用时使用对实际函数的引用来实现这一点。

然后,当您需要模拟函数时,只需将引用指向模拟实现即可。

假设这是您的外部函数:

// this is the wrapper for an external function
func externalFunction(i int) int {
   return i * 10  // do something with input
}

您永远不会直接调用它,而是声明对它的引用:

var processInt func(int) int = externalFunction

当您需要调用函数时,您可以使用引用来调用它:

fmt.Println(processInt(5))

然后,如果您想模拟函数,只需将模拟实现分配给该引用即可:

processInt = mockFunction

这个 playground 把它放在一起,可能比解释更清楚:

https://play.golang.org/p/xBuriFHlm9

如果您有一个接收func(int) int 的函数,您可以向该函数发送实际的externalFunctionmockFunction当您希望它使用模拟实现时。

关于function - Golang 函数测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245549/

相关文章:

wordpress - 使用子主题覆盖函数functions.php

c# - 如何使用 NUnit 在 .NET Core 中模拟 UserManager?

javascript - Jasmine 单元测试与 postMessage 和 addEventListener

c# - 对 REST 客户端进行单元测试

linux - Docker运行错误: exec/app/backend/server: no such file or directory

go - 写连接池

mongodb - 无法安装最新版本的mongo-go-driver(v1.2.1)

c - c 的 displayArray 函数

c - 这个函数怎么写 C

javascript - Yii2按钮onclick匿名函数