【问题标题】:Golang how to unit test private method with receiverGolang如何使用接收器对私有方法进行单元测试
【发布时间】: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


【解决方案1】:

您可以从同一个包中调用未导出的方法,因此只需将您的测试添加到包中即可。测试文件与他们正在测试的代码在同一个包中是很常见的(基本上是常态)。

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 2010-09-20
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2012-09-20
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多