感谢您练习良好的测试!:)
就我个人而言,我不使用
gomock(或任何模拟框架;没有它,Go中的模拟非常容易)。我要么将依赖项
downloader()作为参数传递给函数,要么
downloader()在类型上创建方法,并且该类型可以容纳该
get_page依赖项:
方法1: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()}


