GoのHTTPフレームワークGinで実装したAPIのテストコードを書いていたら401を返すはずのテストケースで200が返ってしまい対応で軽くハマりました。
以下のメッセージが原因っぽかったけどなぜ出てくるのかしばらく分からず。
[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 200 with 401
原因
テストコードでginのmiddlewareをmockしてそこで200を返してしまっていたのが原因っぽい。
こんな感じ
ctrl := gomock.NewController(t)
mockMiddleware := mockMiddleware.NewMockMiddlewareInterface(ctrl)
mockMiddleware.
EXPECT().
DemoAuthorization().
Return(func(c *gin.Context) {
// ここが原因
c.String(http.StatusOK, "Mocked DemoAuthorization")
}).
AnyTimes()
ctrl := gomock.NewController(t)
mockMiddleware := mockMiddleware.NewMockMiddlewareInterface(ctrl)
mockMiddleware.
EXPECT().
DemoAuthorization().
Return(func(c *gin.Context) {
// 単純に消したら問題なくテスト通った
}).
AnyTimes()