代码之家  ›  专栏  ›  技术社区  ›  jbrown

如何在go中测试不同包中未报告的struct字段?

  •  -2
  • jbrown  · 技术社区  · 7 年前

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

    package fetcher
    type GitFetcher struct {
        uri    string
    }
    

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

    package config
    type Source struct {
        fetcher    GitFetcher
    }
    

    我想测试一下 config 包裹。我想构建一些预期的对象,但是由于我的测试在 还有我的 GitFetcher 是在 fetcher

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

    如何跨包构建对象以进行此类测试?我不想用 取款机

    2 回复  |  直到 7 年前
        1
  •  2
  •   Volker    7 年前

    如何在go中测试未报告的[…]不同包?

    一点也不。不可撤销,不要尝试。

    (如果未报告的对象具有导出的方法,则可以调用此方法。)

        2
  •  0
  •   Vincent van der Weele    7 年前

    没有直接的方法来实现这一点。你有多种选择来实现类似的目标,所有这些都有自己的折衷方案。在你的情况下,由你来决定哪种折衷是最可接受的。

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

    1. 制作包装 config 依赖于接口而不是 GitFetcher 结构。这样你就可以嘲笑 在你的测试中。
    2. 为可以构造 取款机 更容易。
    3. 简单地组合这些包。这样您就可以访问测试中两个对象的未报告字段。