我正在使用第三方库,它是某些C函数的包装器。不幸的是,几乎所有Go功能都是免费的(他们没有接收器,他们不是方法);不是我会采取的设计方法,而是我拥有的。
使用Go的标准"测试"库:
是否有解决方案允许我创建可以模拟函数的测试?
或者是将库包装到结构和接口中的解决方案,然后模拟接口以实现我的目标?
我创建了一个monte carlo模拟,它也可以处理生成的数据集。我的一个评估算法会查找特定的模型,然后通过第三方函数进行评估。我知道我的边缘情况并且知道呼叫计数应该是什么,这就是我想要测试的。
也许只需要一个简单的计数器就可以了?
我发现使用此库的其他项目没有全面覆盖或根本没有测试。
答案 0 :(得分:0)
您可以在需要调用时使用对实际函数的引用来执行此操作。
然后,当你需要模拟函数时,你只需将引用指向模拟实现。
让我们说这是你的外在功能:
// 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
。