【问题标题】:Golang: mock struct functions for a testGolang:用于测试的模拟结构函数
【发布时间】:2022-11-22 04:14:46
【问题描述】:

去版本:1.19x

这是我要测试的功能(statsd是"github.com/DataDog/datadog-go/v5/statsd"外部库)

s, err := statsd.New(StatsdHost)

emitGauge(s, 10.0)

// need to test below function
func emitGauge(s *statsd.Client, i float64) {

    // calls statsd Gauge function
    // s.Gauge("name", i, "", 1)

}

我希望我的测试为 statsd.Client 传递一个模拟对象,并断言正确的值传递给了 s.Gauge

我试过了

type StubStatsd struct{}

func (s StubStatsd) Gauge(name string, value float64, tags []string, rate float64) error {
    return nil
}

但我得到Cannot use 'statsdStub' (type StubStatsd) as the type *statsd.Client

测试此类功能的正确方法是什么?

【问题讨论】:

  • 你不能嘲笑*statsd.Client。您的问题已在 SO 上得到一百万次回答。请使用搜索栏。
  • 你的函数emitGauge需要一个接口。如果它采用具体类型,那么这是您可以传递给它的唯一类型。

标签: go


【解决方案1】:

您需要更改您的功能以接受接口。

type Guager interface {
    Gauge(name string, value float64, tags []string, rate float64) error
}

func emitGauge(s Guager, i float64) {
    s.Guage("name", i, "", 1)
}

然后你可以做你模拟的

type StubStatsd struct{}

func (s StubStatsd) Gauge(name string, value float64, tags []string, rate float64) error {
    return nil
}

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多