Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ユニットテストでgo-cmpが便利だった話/recommend-go-cmp-for-ut

 ユニットテストでgo-cmpが便利だった話/recommend-go-cmp-for-ut

Golangでユニットテストを書く際にgo-cmpが役立ったので、LTで紹介しました。

Let's Go Talk #10 で発表した資料になります。
https://connehito.connpass.com/event/290692/
#Go #Golang #LT #Let'sGoTalk

Kota Kageyama

August 22, 2023
Tweet

More Decks by Kota Kageyama

Other Decks in Programming

Transcript

  1. 実行時に困ったこと ▷ 数値計算でNaN同士の比較ができない ◦ NaN == NaN // false math.IsNaN()の使用必須

    ▷ 現在時刻の取得等でミリ秒誤差によるエラー ▷ 配列の並び順が異なるとエラー ▷ 実行環境に起因する数値誤差でエラー ◦ 1.8371173070873836 != 1.8371173070873834 9
  2. 思ったこと ▷ 数値計算でNaN同士の比較ができない ◦ NaN == NaN // false math.IsNaN()の使用必須

    ▷ 現在時刻の取得等でミリ秒誤差によるエラー ▷ 配列の並び順が異なるとエラー ▷ 実行環境に起因する数値誤差でエラー ◦ 1.8371173070873836 != 1.8371173070873834 10 Golangの仕様もあるし仕方ない。 比較用の特別な処理関数書くか。。 ↓ やっぱめんどくさいし、コードがめちゃくちゃ増える。 testパッケージ探そう!
  3. go-cmpで使えるオプション抜粋 ▷ NaN同士を等価とする ◦ cmpopts.EqualNaNs() ▷ 日付の誤差を許容する ◦ cmpopts.EquateApproxTime(time.Duration) ▷

    配列の並び順を揃える ◦ cmpopts.SortSlices(SortFunc() bool) ▷ 数値誤差を許容する ◦ cmpopts.EquateApprox(fraction, margin) 16