假设我有一个如下所示的依赖项:
[ProtoContract]
public class GeneralPacket
{
public uint Identity;
[ProtoMember(1, IsRequired = true)]
public uint Arg1;
[ProtoMember(2, IsRequired = true)]
public uint Arg2;
[ProtoMember(3, IsRequired = true)]
public uint Arg3;
}
我在代码中使用它,我想进行单元测试
type Dependency interface {
Retrieve(transform func(row *Row) string) []string
}
这是一个人为的例子,但是考虑像gcloud pubsub这样的东西,它有一个Receive方法,它为每个消息调用一个用户定义的函数。
如果我使用mockgen来模拟Dependency,我该如何告诉mock如何表现?我想让它用一些输入集调用它的输入函数很多次。
答案 0 :(得分:0)
在尝试理解您想要实现的目标时,这是一些代码。 我不使用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)
}