Unit testing 如何在go的不同包中测试未报告的结构字段?
我有一个用工厂创建对象的包。结构具有未报告的字段,例如:Unit testing 如何在go的不同包中测试未报告的结构字段?,unit-testing,testing,go,Unit Testing,Testing,Go,我有一个用工厂创建对象的包。结构具有未报告的字段,例如: package fetcher type GitFetcher struct { uri string } 我有另一个包,它解析一些配置文件,然后构建另一个使用上述对象的对象: package config type Source struct { fetcher GitFetcher } 我正在尝试测试我的config包。我想构建一些预期的对象,但由于我的测试在config中,而我的GitFetcher在
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
factory方法,因为它需要的参数并不简单
如何在go中测试未报告的[…]不同包
一点也不。可撤销的,不要尝试
(如果未报告的对象具有导出方法,则可以调用此方法。)
如何在go中测试未报告的[…]不同包
一点也不。可撤销的,不要尝试
(如果未报告的东西有一个导出方法,那么您可以调用此方法。)没有直接的方法来实现这一点。您有多种选择来实现类似的目标,所有这些都有自己的权衡。这取决于你决定在你的情况下哪种权衡是最可接受的 一般来说,我会按以下顺序尝试:
config
依赖于接口,而不是GitFetcher
struct。这样,您就可以在测试中模拟GitFetcherGitFetcher
的测试没有直接的方法来实现这一点。您有多种选择来实现类似的目标,所有这些都有自己的权衡。这取决于你决定在你的情况下哪种权衡是最可接受的 一般来说,我会按以下顺序尝试:
config
依赖于接口,而不是GitFetcher
struct。这样,您就可以在测试中模拟GitFetcherGitFetcher
的测试@leafbebop Unexported并不意味着您不能拥有此类类型的实例。如果包a中的某个函数F给出了一个a.unexported方法M和thne,则可以执行u:=a.F();u、 M()。我以为您指的是OP指定的未报告字段。Nevermind.@leafbebop Unexported并不意味着您不能拥有此类类型的实例。如果包a中的某个函数F给出了一个a.unexported方法M和thne,则可以执行u:=a.F();u、 M()。我以为您指的是OP指定的未报告字段。没关系,因为不知道该怎么办而投了反对票。很好:-DDown投票支持不知道该怎么办。很好:-D