emahiro/b.log

日々の勉強の記録とか育児の記録とか。

time.Now() を使ってテスト結果の比較をするときにCreatedAt に幅を持たせる

知らなかったので備忘録です。

Overview

go-cmp を使用して DB の Insert のテストを記述するとき time.Now() を使ってしまうと生成したデータと比較対象のデータでレコードの作成時刻( created_at )で誤差レベルの Diff が生じてしまいます。
※ 生成時刻の time.Now() と比較したい対象(Goでは慣習的に want を使うことが多い)が生成されるタイミングの time.Now() で Call されるタイミングが微妙に異なるから(と言っても ns, ms レベル)

どうやるのか

以下の zenn のエントリに書いてあるとおりなのですが、go-cmp の cmpopts.EquateApproxTime という option を利用します。

zenn.dev

option の引数に指定した duration の分は誤差が合っても同じものとして判定される( Diff の判定をゆるくする)ので Insert や Update のテストで利用することができます。

SeeAlso

pkg.go.dev