gpt4 book ai didi

Go - 如何模拟需要回调的依赖项?

转载 作者:IT王子 更新时间:2023-10-29 02:21:30 26 4
gpt4 key购买 nike

假设我有一个如下所示的依赖项:

type Dependency interface {
Retrieve(transform func(row *Row) string) []string
}

我在我想进行单元测试的代码中使用它

// ...
result := dep.Retrieve(func(row *Row) string {
// ... do stuff
})
// ...

这是一个人为的例子,但考虑一下 gcloud pubsub 之类的东西,它有一个 Receive 方法,可以为它提取的每条消息调用用户定义的函数。

如果我使用 mockgen 来获取 Dependency 的 mock,我该如何告诉 mock 如何表现?我希望它使用一些输入集多次调用其输入函数。

最佳答案

这是一些代码,同时试图理解您想要实现的目标。我不使用 mockgen,但手动,你可以做你想做的。我完全改变了原始调用和模拟调用之间的行为。它能回答您的问题吗?

package main

import (
"fmt"
)

var str = [...]string{
"world",
"night",
}

type Dependency interface {
Get(val string) string
}

type dependency struct {
i int
}

func (d *dependency) Get(fn func(int) string) string {
d.i++
d.i = d.i % len(str)

return "hello " + fn(d.i)
}

func main() {
d := dependency{}
myfn := func(idx int) string { return str[idx] }
fmt.Println(d.Get(myfn))
fmt.Println(d.Get(myfn))
fmt.Println(d.Get(myfn))

m := mock{}
fmt.Println(m.Get(myfn))
}

type mock struct {
}

func (m *mock) Get(fn func(int) string) string {
i := 0
j := (i + 1) % len(str)
k := (j + 1) % len(str)

return "mocked " + fn(i) + fn(j) + fn(k)
}

播放链接: https://play.golang.org/p/bb7WrmlIEN

关于Go - 如何模拟需要回调的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47255595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com