亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 golang 中構建模擬類?

如何在 golang 中構建模擬類?

Go
翻閱古今 2022-03-07 22:40:47
我正在嘗試為 golang 中的單元測試構建模擬類;有誰知道這是怎么做到的嗎?例如,在下面的代碼片段中,我想打印 FakeMyClass.Object 的返回值。package mainimport (    "fmt")type MyClass struct {}func (*MyClass) Object() (int) {    return 0}func (mc *MyClass) PrintInfo() {    fmt.Printf("%v\n", mc.Object())}type FakeMyClass struct {    MyClass}func (*FakeMyClass) Object() (int) {    return 1}func main() {    mc := &FakeMyClass{}    mc.PrintInfo()}
查看完整描述

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)

}


查看完整回答
反對 回復 2022-03-07
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

我為此使用了 mockgen:

mockgen -source myModule.go -package myPackage -destination myModuleMock.go

您可以通過以下方式安裝它:get get github.com/golang/mock


查看完整回答
反對 回復 2022-03-07
?
飲歌長嘯

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)

}


查看完整回答
反對 回復 2022-03-07
  • 3 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號