Golang测试功能

时间:2017-09-15 18:30:16

标签: function unit-testing go

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

使用Go的标准"测试"库:

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

或者是将库包装到结构和接口中的解决方案,然后模拟接口以实现我的目标?

我创建了一个monte carlo模拟,它也可以处理生成的数据集。我的一个评估算法会查找特定的模型,然后通过第三方函数进行评估。我知道我的边缘情况并且知道呼叫计数应该是什么,这就是我想要测试的。

也许只需要一个简单的计数器就可以了?

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

1 个答案:

答案 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的函数,那么当您希望它使用模拟实现时,您可以将该函数发送到实际的externalFunctionmockFunction