go golang TDD Test-Driven Development

上一篇講了 Dependency Injection

並且用 Database 當成範例來解釋

實際用起來會遇到另一個小問題

就是 DataStore 這一個 interface 會有太多的 function (真實的 db 會符合這一個 interface)

在 Mock 的時候 需要實做太多這一個 Test Case 不會用到的 function

個人的解決方法如下:

真實的 db 一樣是符合 DataStore 這一個 interface

但是單一個 function 的 Dependency Injection 用的是比較小的 interface

DataStore 這一個 interface 就只是各個小的 interface 的集合


  type Datastore interface {
    DatastoreCustomer
  }

  type DatastoreCustomer interface {
    CheckUserNameCanUse(name string) bool
  }

  // 實際 function 的輸入是 function 比較少的 interface
  func handlePostSignUp(db DatastoreCustomer) gin.HandlerFunc {
    // do something
  }

這樣就可以避免在寫測試的時候,需要 Mock 的物件去實作一堆 function 的問題


打完收工