echo のよさの1つはテストがやりやすい
にわかサッカーファンになって、20時頃に1-2時間寝て24時からワールドカップのクロアチア戦をみて3時に寝て8時に起きた。睡眠のリズムが完全に狂ってしまった。
echo のテストのやりやすさ⌗
うちのチームでは http フレームワークに echo を採用 している。その後、開発を継続していていくつか http ハンドラーも実装されてきた。そろそろ http ハンドラーのテストを書いていこうと参照実装を私が書いてみた。メンバーが知らないことは、マネージャーの私が参照実装して教えるといったやり方をしている。echo.HandlerFunc に echo.Context を渡すシンプルなインターフェースはテストを書くときに http ハンドラー以外の依存関係 (例えば db とのコネクションなど) を context を介することでモックと差し替えるのが容易になる。
tests := []struct {
name string
ctx echo.Context
err *echo.HTTPError
} {
...
func() echo.Context {
data := `{...}`
c := newEchoContext(http.MethodPost, "/endpoint", data)
c.Set("db", &myMockDB{})
return c
}(),
...
}
if err := myHTTPHandler(ctx); err != nil {
...
}
こんな感じで context にモックを入れてしまえば http ハンドラーそのものの単体テストを簡単に書ける。そんなことをツィートした。
その後 echo を採用して echo のよいところに1つ気付いた。echo.HandlerFunc に echo.Context を渡すインターフェースはテストがやりやすい。例えば、コンテキストで db のコネクションを保持しておけば、テストのときにモックに差し替えて http ハンドラーの単体テストを実装しやすい。
— Tetsuya Morimoto (@t2y) December 7, 2022
そしたら podhmo からレスをもらったので go のリクエストコンテキストの扱いについても議論した。
- リクエストスコープのものを context に入れるのは同意
- それ以外のスコープのものを context に入れるのは懸念がある
- http ハンドラーのレイヤーとアプリケーションのレイヤーが明確に分かれているならまだ理解できる
- アプリケーションのレイヤーで context を自由に使うと依存関係や統制が取れなくなる
- これは私も同意するところでアプリケーションのレイヤーにリクエストコンテキストを渡す必要はない
https://t.co/Yomdbyh1H0
— po (@podhmo) December 7, 2022
昔にこういう記事を書いてた。
chiはルーティングライブラリと考えるとスムーズ。
あとはnet/httpのミドルウェアを使いたいかechoなど専用のものを書くかの違いくらいかな。 https://t.co/9LtoanpY0c
オフィス住所の更新⌗
引き続き、住所変更の手続きを時間をみつけてやっている。同じ銀行の住所変更の手続きでも PayPay 銀行と三菱 UFJ 銀行ではまったく異なる。前者はオンラインでアカウント情報を変更するだけで済んだ。簡単。一方で後者はオンラインではできず、来店予約をとって対面で行う。当日に登記事項証明書の原本をもってこいと。なんという面倒臭さ。よくよく考えたら法人の登記事項証明書は誰でも取得できる。行政のシステムがどうなっているか知らないが、銀行が法人の住所変更を自分たちで調べることもやろうと思えばできるはず。登記事項証明書をオンラインで取得する手数料は500円になる。来店予約すると応対する人の人件費を考えたらシステムの手数料を支払った方が安いのではないか。
国税庁の管轄ではあるが、国税庁法人番号公表サイト から法人の住所変更そのものは確認できる。これは e-tax で次の2つの書類を申請した。登記事項証明書がなくても申請はできた。なにも言ってこなければ問題ないのかな?
- 異動届
- 給与支払事務所等の開設・移転・廃止の届出
有償にはなるが 登記情報提供サービス というのがあって登記情報をオンラインで確認できる。このサービスを会社で契約していればいつでも確認できるはず?