在包相关方法中模拟导入函数
为依赖于从外部包导入的函数的方法编写测试时,模拟可能变得必要将测试与导入函数的实际实现隔离。在 Go 中,这可以通过简单的重构来实现。
考虑以下从 x.y.z 包导入和使用函数的方法:
import x.y.z func abc() { ... v := z.SomeFunc() ... }
要模拟 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中文网其他相关文章!