Gin http request test 筆記

gin 思路 參考相關文件、 repo ,在設計上的層級類似下列這樣 server => service (interface) => repository (interface) 將 interface 開出來,實作完之後一路使用注入的逐層掛進去。 開出 interface 除了規範 method 之外,還能在後續針對測試時, 方便撰寫 mock 注入。 server | - service | - repository 略 測試 以使用 gin 為例 get const wantGetMsg = "mock hello eric" func TestHelloByName(t *testing.T) { gin.SetMode(gin.TestMode) r := gin.Default() // di mock service service := MockHelloService{} server := NewHelloServer(service) // mount router r.GET("/hello/:name", server.SayHello) rq := httptest.NewRequest(http.MethodGet, "/hello/eric", nil) rw := httptest....

March 1, 2022 · 2 min · Me

Gorm Sqlite 測試相關問題

failed to initialize database 原因 golang + gorm 搭配 sqlite 練習測試的時候發現, 把 db 用 go-sqlmock 的替換掉後,在跑測試時會噴 failed to initialize database, got error all expectations were already fulfilled, call to Query 'select sqlite_version()' mysql 解法 如果 db 是用 mysql 的話,只要這樣設定 gDB, err := gorm.Open(mysql.New(mysql.Config{ Conn: DB, SkipInitializeWithVersion: true, }), &gorm.Config{}) 細節可以參考 source code sqlite 暫解 不過在 sqlite 上面看 code 是沒有開這個參數 source code 因為只是練習,所以我這邊先直接寫一個新的 MockDialector 把它掛進來, 然後把 sqlite.Dialector() 複製過來後把 version 不需要的地方拿掉。 實際上應該把相關的 code 都看過,確認是不是有必要開這個參數出來,然後發個 issue , 如果沒問題 pr 做出來之類的?...

February 10, 2022 · 2 min · Me