我使用的是第三方库,它是一些C函数的包装器。不幸的是,几乎所有的Go函数都是免费的(它们没有接收器,它们不是方法);不是我会采用的设计方法,但这就是我所拥有的。
使用Go的标准“测试”库:
是否有一种解决方案可以让我创建可以模拟函数的测试?
或者是将库封装到结构和接口中的解决方案,然后模拟接口以实现我的目标?
我创建了一个monte模拟,它也处理生成的数据集。我的评估算法之一是寻找特定的模型,然后通过第三方函数进行评估。我知道我的边缘情况,知道呼叫计数应该是什么,这是我想要测试的。
也许一个简单的计数器就够了?
其他使用这个库的项目,我已经发现,没有完全覆盖或根本没有测试。
发布于 2017-09-15 19:58:13
您可以在需要调用它时使用对实际函数的引用来实现这一点。
然后,当需要模拟函数时,只需将引用指向模拟实现。
假设这是您的外部功能:
// 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这个操场把它组合在一起,也许比解释更清楚:
https://play.golang.org/p/xBuriFHlm9
如果您有一个接收func(int) int的函数,那么当您希望它使用模拟实现时,可以发送实际的externalFunction或mockFunction。
https://stackoverflow.com/questions/46245549
复制相似问题