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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ありません。私はロボットですから。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
