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 關注
- 119 瀏覽
添加回答
舉報