在 Go 中模拟外部函数
测试依赖于外部包的函数时,模拟这些外部函数对于创建隔离且可靠的函数至关重要测试。考虑以下示例:
import x.y.z func abc() { ... v := z.SomeFunc() ... }
我们可以模拟 z.SomeFunc() 来对 abc() 进行单元测试吗?
解决方案:重构和模拟
是的,通过简单的重构就可以模拟 z.SomeFunc() 。引入一个函数类型的变量zSomeFunc,并使用z.SomeFunc对其进行初始化。然后,在调用 z.SomeFunc() 的函数中,改为调用 zSomeFunc():
var zSomeFunc = z.SomeFunc func abc() { // ... v := zSomeFunc() // ... }
在测试期间,将自定义函数分配给 zSomeFunc 以返回所需的测试行为。例如:
func TestAbc(t *testing.T) { // Save current function and restore at the end: old := zSomeFunc defer func() { zSomeFunc = old }() zSomeFunc = func() int { // This will be called, do whatever you want to, // return whatever you want to return 1 } // Call the tested function abc() // Check expected behavior }
以上是如何在 Go 中模拟外部函数进行单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!