iT邦幫忙

2021 iThome 鐵人賽

1

文章同步更新於https://kevinyay945.com/smart-home-tutorial/025

因為接下來如果要進行測試,勢必得在建立每個interface的時候都要新增一次mock interface,而且未來如果這個interface要擴增的時候,又得再重新輸入一次指令,所以在gomock官網中有提到,如果想要批次建立mock file,可以透過

go generate

來進行批量產生
go generate的原理是透過註解的方式,來執行後面的語法
所以可以搭配上mockgen一起使用
就可以如下

//go:generate mockgen -destination=mock/command.go -package=modelMock . ICommand  
type ICommand interface {  
  Get() ([]schema.Command, error)  
  Save(input *schema.Command) (schema.Command, error)  
  UpdateOne(commandUuid string, command *schema.Command) (schema.Command, error)  
  Delete(commandUuid string) error  
}

然後到根目錄執行

go generate ./...

而這個./...的意思是
./ => 當前目錄
... =>下面目錄的所有字串,以及所有路徑

參考

https://stackoverflow.com/questions/28031603/what-do-three-dots-mean-in-go-command-line-invocations

只要這樣做,就可以將所有資料夾中檔案有go generate的都跑一遍了
go generate

那如果未來會忘記這段指令怎麼辦呢
這時候,就用到另一個小工具
Makefile
這個工具可以幫我們把很多系統上的使令統一放到一個檔案中,然後透過

make xxxxx

來執行
那這個檔案寫法如下

.PHONY: generate run  
  
run:  
  go run .  
  
generate:  
  go generate ./...

然後在你存放Makefile的路徑下執行

make generate

他就會幫你執行

go generate ./...

Makefile

至於.PHONY是什麼呢
因為這個Makefile除了執行指令,其實主要是拿來做compile用的,所以會建議,如果你在執行的指令,如果她就只是指令,而不是檔案的話,就把它放到.PHONY後面,因為放在.PHONY裡的內容,Makefile在執行的時候,才會去辨別他有沒有改變
舉個例子
如果剛好有個檔案叫做generate
然後你第一次執行

make generate

他會去正常實行 go generate ./...
但第二次執行時
因為generate沒有在.PHONY中,所以Makefile在判斷的時候,就會覺得你的generate沒有變動,就不會去執行go generate ./...了
詳細的內容可以到網路上查看更多資料,我這邊就僅用在執行指令

附上這次的comment紀錄
https://github.com/kevinyay945/smart-home-backend/tree/v0.5.2


上一篇
撰寫http request 的測試(golang)(Day24)
下一篇
撰寫http request 的複雜一點的測試(Day26)
系列文
網頁新手入門,手把手用React/Golang(Echo)開發基礎網頁(以簡易智慧家庭為例)28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言