1 回答
TA贡献1818条经验 获得超7个赞
首先,您需要一个实现该vInterface接口的类型(任何类型)。这是一个简单的例子:
type mockedVInterface struct {
value bool
}
func (m mockedVInterface) function1() bool {
return m.value
}
这是一个我们可以控制的足够简单的实现:我们可以function1()通过简单地将那个值设置到它的字段来告诉它的函数应该返回什么value。
此mockedVInterface类型仅为测试目的而创建,生产代码不需要它。把它放在你有测试代码的同一个文件中(放在前面Test_callSomething())。
这是测试代码:
func Test_callSomething(t *testing.T) {
type args struct {
si vInterface
}
tests := []struct {
name string
args args
want bool
}{
{
name: "testing false",
args: args{
si: mockedVInterface{value: false},
},
want: false,
},
{
name: "testing true",
args: args{
si: mockedVInterface{value: true},
},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := callSomething(tt.args.si); got != tt.want {
t.Errorf("callSomething() = %v, want %v", got, tt.want)
}
})
}
}
请注意,在这个简单的例子中,我们还可以使用一个简单的非结构类型,bool它的底层类型如下:
type mockedVInterface bool
func (m mockedVInterface) function1() bool {
return bool(m)
}
它有效并且测试代码也更简单:
tests := []struct {
name string
args args
want bool
}{
{
name: "testing false",
args: args{
si: mockedVInterface(false),
},
want: false,
},
{
name: "testing true",
args: args{
si: mockedVInterface(true),
},
want: true,
},
}
但这仅在可模拟接口具有具有单个返回值的单个函数时才有效。在一般情况下,需要一个结构。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报