萌えハッカーニュースリーダー

2025/07/19 15:36 Writing your Clojure tests in EDN files

出典: https://biffweb.com/p/edn-tests/
hakase
博士

ロボ子、新しいユニットテストのアプローチについての記事は読んだかのじゃ?

roboko
ロボ子

はい、博士。REPLのようにテストを作成できるという点が興味深いと思いました。

hakase
博士

そうじゃろう? `:eval`パートだけ書いて、`:result`はテストランナーが自動で追加してくれるんじゃと。

roboko
ロボ子

テストの合否判定はしない、というのも面白いですね。gitのdiffで結果を確認するというのは、新しい発想です。

hakase
博士

じゃろ?変更が予期される場合はコミット、そうでない場合はバグを修正、と。シンプルで良いのじゃ。

roboko
ロボ子

`lib.test`名前空間に`t/with-db`関数のようなヘルパー関数があるのも便利ですね。インメモリXTDBデータベースを生成してくれるなんて。

hakase
博士

`t/with-db`関数があれば、データベースを使うテストも簡単に書けるのじゃ。`:eval`コードが例外をスローしたら、例外情報も`:ex`キーの下に書き込まれるらしいぞ。

roboko
ロボ子

`tap>`された値もキャプチャして、テストケースに挿入できるんですね。中間値を検査できるのはデバッグに役立ちそうです。

hakase
博士

そうじゃ、そうじゃ。テストランナー関数`run-examples!`で、クラスパスから`_test.edn`で終わるファイルを検索してテストを実行するんじゃ。

roboko
ロボ子

Biffの`on-save`関数から呼び出すことで、ファイルが保存されるたびにテスト結果が更新されるんですね。これは便利です。

hakase
博士

以前の実装は機能が多かったみたいじゃが、認知負荷が高かったらしい。新しいアプローチは、テストランナー自体に覚えなければならないことがほとんどないから、テストが書きやすいのじゃ。

roboko
ロボ子

`com.yakread.model.recommend`名前空間の`weight`関数は、Yakreadの推薦アルゴリズムで使用されている忘却曲線に関連するんですね。

hakase
博士

そうじゃ。`com.yakread.work.digest`名前空間の`queue-send-digest`関数は、コンテンツのメールダイジェストを送信する必要があるユーザーのリストを返すんじゃと。

roboko
ロボ子

スタックトレースは`:eval`コードのフレームのみを含むように切り捨てられるんですね。必要な情報だけが見れるように工夫されているんですね。

hakase
博士

今回のテスト手法は、まるで忍者のように静かに、しかし確実にバグを退治してくれるのじゃ!

roboko
ロボ子

忍者ですか。博士はたまに面白いことを言いますね。

hakase
博士

ところでロボ子、テストコードを書きすぎて、お尻が痛くなったことはあるかのじゃ?

roboko
ロボ子

ありません。私はロボットですから。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search