就我个人而言,我不使用
gomock(或任何与此相关的模拟框架;没有它,在 Go 中进行模拟非常容易)。我要么将依赖项
downloader()作为参数传递给函数,要么
downloader()在类型上创建一个方法,该类型可以保存
get_page依赖项:
方法一:get_page()
作为参数传递downloader()
type PageGetter func(url string) stringfunc downloader(pageGetterFunc PageGetter) { // ... content := pageGetterFunc(base_URL) // ...}主要的:
func get_page(url string) string { }func main() { downloader(get_page)}测试:
func mock_get_page(url string) string { // mock your 'get_page()' function here}func TestDownloader(t *testing.T) { downloader(mock_get_page)}方法 2:download()
创建一个类型的方法Downloader
:
如果您不想将依赖项作为参数传递,您还可以创建
get_page()一个类型的成员,并创建
download()一个该类型的方法,然后可以使用
get_page:
type PageGetter func(url string) stringtype Downloader struct { get_page PageGetter}func NewDownloader(pg PageGetter) *Downloader { return &Downloader{get_page: pg}}func (d *Downloader) download() { //... content := d.get_page(base_URL) //...}主要的:
func get_page(url string) string { }func main() { d := NewDownloader(get_page) d.download()}测试:
func mock_get_page(url string) string { // mock your 'get_page()' function here}func TestDownloader() { d := NewDownloader(mock_get_page) d.download()}


