【发布时间】:2021-12-07 18:53:55
【问题描述】:
在 Go 中,如何使用接收器对私有方法进行单元测试?例如,如何对代码段进行单元测试,如下所示。
如果启动 srv 的实例,则 isShare 通过实例的句柄隐藏。所以在测试代码中不能调用isShare。
搜索并阅读了一些帖子,但它们都是关于没有指定接收者的私有函数。
package service
func (s *srv) isShare(id string) ( bool, error) {
record := s.db.Get(id)
if record != nil {
return true, nil
}
return false, errors.New("record not found.")
}
一个额外的问题可能是,如果在srv 实例中实例化了一个 DB 类型字段,那么在单元测试中,如何将模拟 DB 字段绑定到 srv 而不是真正的 DB 类型?
【问题讨论】:
-
"所以在测试代码中不能调用 isShare。" --- 为什么?
-
@zerkms 因为它是私有的并且没有导出。
-
要访问包
service中未导出的方法,请将测试写入同一个包中。 -
@lee 所以在同一个包中创建测试?
-
您几乎总是在同一个包中创建测试。
标签: unit-testing go testng