我有一个用工厂创建对象的包。这些结构具有未导出的字段,例如:
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
工厂方法,因为它采用的参数并不直接。
答案 0 :(得分:2)
如何在go中测试未导出的其他软件包?
一点也不。不可,请勿尝试。
(如果未导出的事物具有导出的方法,则可以调用此方法。)
答案 1 :(得分:0)
没有直接的方法可以实现这一目标。您可以有多种选择来实现相似的目标,但都需要权衡取舍。由您决定哪种折衷方案最适合您。
通常,我会按以下顺序尝试它们:
config
依赖于接口而不是GitFetcher
结构。这样,您就可以在测试中模拟GitFetcher
。GitFetcher
的测试。