登录
首页 >  Golang >  Go问答

如何测试Go中未导出的结构字段?

来源:stackoverflow

时间:2024-03-10 08:24:25 332浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何测试Go中未导出的结构字段?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我有一个使用工厂创建对象的包。该结构具有未导出的字段,例如:

package fetcher
type gitfetcher struct {
    uri    string
}

我有另一个包,它解析一些配置文件,然后构建另一个使用上述对象的对象:

package config
type source struct {
    fetcher    gitfetcher
}

我正在尝试测试我的 config 包。我想构建一些预期的对象,但由于我的测试位于 config 中,而我的 gitfetcher 位于 fetcher 中,所以我不能只创建我想要的对象,例如:

package config
expected := GitFetcher{
    uri: "example.com/repo.git"      // doesn't work. Field isn't exported.
}

如何跨包构建对象以进行这样的测试?我不想使用 fetcher 工厂方法,因为它采用的参数并不简单。


解决方案


如何在 go 中测试未导出的不同包?

一点也不。不可撤销,请勿尝试。

(如果未导出的东西有一个导出的方法,那么你可以调用这个方法。)

没有直接的方法来实现这一点。您有多种选择来实现类似的目标,但都有各自的权衡。由您决定哪种权衡最适合您的情况。

一般来说,我会按以下顺序尝试它们:

  1. 使包 config 依赖于接口而不是 GitFetcher 结构。这样您就可以在测试中模拟 GitFetcher
  2. 添加一个专门用于测试的额外工厂方法,可以更轻松地构建 GitFetcher
  3. 导出未导出的字段。
  4. 只需合并软件包即可。这样您就可以在测试中访问两个对象的未导出字段。

好了,本文到此结束,带大家了解了《如何测试Go中未导出的结构字段?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>