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()