首页  >  文章  >  后端开发  >  如何通过未导出的函数重用 Go 中导入包的测试代码?

如何通过未导出的函数重用 Go 中导入包的测试代码?

Patricia Arquette
Patricia Arquette原创
2024-11-04 03:48:29807浏览

How to Reuse Test Code from Imported Packages in Go with Unexported Functions?

在 Go 中的导入包中重用测试代码

在您的目录结构中,您希望在 pkg1_test.go 中有一个测试实用程序函数在 main_test.go 中使用,它导入 pkg1。然而,pkg1_test.go 中的函数使用了 pkg1 中未导出的函数,使其在包外不可用。

考虑以下方法:

将函数移至 pkg1.go

虽然将函数移动到 pkg1.go 可以使其在 main_test.go 中访问,但它可能会导致该函数包含在 go build 生成的二进制文件中。这对于仅测试函数来说是不可取的。

创建单独的测试实用程序包

将函数移动到单独的测试实用程序包并在 *_test 中手动导入。 go 文件似乎很理想。但是,该函数仍然需要访问 pkg1 中的内部方法,这些方法可能无法导出。

混合方法

对于您的特定场景,混合方法提供了解决方案:

  1. 将测试实用函数从 pkg1_test.go 移至新包,我们称之为 testutils。
  2. 在 main_test.go 和 pkg1_test.go 中导入 testutils。
  3. 在 pkg1_test.go 中,添加如下函数:

    <code class="go">func getPrivateData() []byte {
        // Code to get internal data from pkg1
    }</code>
  4. 在 testutils 中,从 pkg1_test.go 中的 getPrivateData 加载私有数据,并使用它来执行必要的操作

这种方法允许您重用测试实用函数,同时将其与生产代码分开并避免未导出函数的问题。

以上是如何通过未导出的函数重用 Go 中导入包的测试代码?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn