3 回答

TA貢獻1934條經驗 獲得超2個贊
我更喜歡使用github.com/stretchr/testify/tree/master/mock
package main
import (
"fmt"
"github.com/stretchr/testify/mock"
)
type MyClass struct {
}
func (*MyClass) Object() (int) {
return 0
}
func (mc *MyClass) PrintInfo() {
fmt.Printf("%v\n", mc.Object())
}
type FakeMyClass struct {
mock.Mock
}
func (fmc *FakeMyClass) Object() (int) {
args := fmc.Called()
return args.Int(0)
}
func (fmc *FakeMyClass) PrintInfo() {
fmt.Printf("%v\n", fmc.Object())
}
func main() {
mc := &FakeMyClass{}
mc.On("Object").Return(1)
mc.PrintInfo()
//mc.AssertExpectations(t)
}

TA貢獻1772條經驗 獲得超6個贊
我為此使用了 mockgen:
mockgen -source myModule.go -package myPackage -destination myModuleMock.go
您可以通過以下方式安裝它:get get github.com/golang/mock

TA貢獻1951條經驗 獲得超3個贊
您正在尋找該Object()方法的虛擬調度。我所知道的 Go 中唯一的虛擬調度形式是使用接口。
PrintInfo然后將是一個使用該接口類型的函數。
例如:
package main
import (
"fmt"
)
type WithObject interface {
Object() int
}
func PrintInfo(wo WithObject) {
fmt.Printf("%v\n", wo.Object())
}
type MyClass struct {
}
func (*MyClass) Object() (int) {
return 0
}
type FakeMyClass struct {
MyClass
}
func (*FakeMyClass) Object() (int) {
return 1
}
func main() {
fmc := &FakeMyClass{}
PrintInfo(fmc)
}
- 3 回答
- 0 關注
- 189 瀏覽
添加回答
舉報