1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Goのテストでテストデータのレコードで重複が起きユニークバリデーションエラーが起きて失敗する

Posted at

はじめに

Goのテストを書くときにテストデータの挙動でかなり時間を使ってしまったのでまとめます

問題

テストデータをCreateUserで毎回同じユーザーを作成するようにしているのだが、なぜかメールアドレスのバリデーションエラーが発生してテストが失敗してしまう。

そして成功するときもあれば失敗するときもあるので挙動がよくわからなかったです

ユーザーは作成後(テスト終わり)に削除をしていました

2022/09/05 08:07:38 /go/src/models/db_test_setting.go:50 Error 1062: Duplicate entry 'test@sample.jp' for key 'users.email'

解決方法

Goのテストは並列で実行されるためユーザー作成のタイミングが被ることが起こり得ました
そしてそのタイミングになぜテストが失敗になるのかを調べたところ、インサートに失敗した際に以下のようなハンドリングをしていました

user.go
if err != nil {
    log.Fatalln(err)
}

log.fatallnはプログラムを強制で終了させてしまうのでテストが評価される前に失敗になってしまっていた
ユーザー作成で重複してもエラーハンドリングをすればうまくいくはずだが、これが原因だった

user.go
if err != nil {
    log.Printf(err)
}

にしてログを表示するだけにしてテストを通すようにした

おわりに

エラーハンドリングで無意識に使っていましたが、ちゃんと使いどころを考えないと沼ってしまうことを学びました

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?