iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

2023年度學習分享系列 第 7

Constructor與DI

  • 分享至 

  • xImage
  •  

文章未來將更新於:
https://kevinyay945.com/golang-project-design/2023/constructor&di/

在前一篇文章提到,在golang中,如果要mock的話只能mock interface,因此,我們在做依賴注入的時候就要特別注意注入的內容都要是以interface為主,才有辦法在測試的時候順利的被替換掉

舉例來說,假設我要透過http的方式來上傳圖片,我將需要的handler都掛在一個struct的method上,又因為要上傳資料的緣故,我們會希望這個上傳的功能可以在application中被實現,所以我們要先在application中放上一個可以上傳圖片的interface,那我們就可以這麼做

application/file_store.go

package application

type FileStorer interface {
	UploadAsset(filename string, i []byte, s string) (link string, err error)
}

interface/api.go

type EchoServer struct {
    fileStorer application.FileStorer
}

func (e *EchoServer) V1UploadAsset(ctx echo.Context) error {
	link, err := e.fileStorer.UploadAsset(file.Filename, fileBytes.Bytes(), string(location))
	if err != nil {
		return echo.NewHTTPError(http.StatusBadRequest, err)
	}
	return ctx.JSON(http.StatusOK, TempAsset{
		Url: link,
	})
}

從上面的程式碼中就可以觀察到,如果我們有一個struct可以實做UploadAsset,那api的功能就可以順利被執行了

所以這時候就可以用到前一篇介紹的mock的工具,就可以順利的實做出下方需要的程式

server := EchoServer{
    fileStorer: mockFileStorer,
}

上一篇
mock工具介紹
下一篇
testify規劃方式
系列文
2023年度學習分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言