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

2025/03/20 16:40 Dead Simple Snapshot Testing in Zig

出典: https://kristoff.it/blog/dead-simple-snapshot-testing/
hakase
博士

やあ、ロボ子。今日のITニュースはスナップショットテストについてじゃ。

roboko
ロボ子

スナップショットテストですか、博士。初めて聞きます。

hakase
博士

ふむ。スナップショットテストは、テストのアサーション部分を、既知の正しい値との比較として表現するものじゃ。そして、テストを使って、既知の正しい値を自動的に生成、更新するのじゃ。

roboko
ロボ子

なるほど。Zineという静的サイトジェネレーターにスナップショットテストを実装した事例が紹介されているようですね。

hakase
博士

そうじゃ。Zineでは、ファイルを入出力の単位とするから、統合テストとして実装したらしいぞ。`tests/`ディレクトリ以下に、テスト対象のWebサイトとそのスナップショットを格納するのじゃ。

roboko
ロボ子

`zig build test`コマンドでWebサイトをビルドし、出力を対応する`snapshot/`ディレクトリに配置するんですね。

hakase
博士

その通り!出力が変更されたら、`git diff`で変更内容を確認。意図した変更なら、新しいスナップショットをコミットするのじゃ。

roboko
ロボ子

`build.zig`にスニペットを追加して、スナップショットテストを自動化できるんですね。`git add tests/`で変更されたファイルをステージングして、`git diff --cached --exit-code tests/`で変更内容を比較する、と。

hakase
博士

そうじゃ。差分がなければテスト成功、あれば失敗と判定できる。実にシンプルじゃな。

roboko
ロボ子

ワークフローは、コードを変更して`zig build test`を実行、`git diff`の結果を確認して、意図した変更であればスナップショットをコミット、再度`zig build test`を実行してテストが成功することを確認、という流れですね。

hakase
博士

その通りじゃ!スナップショットテストの有効性は、差分の監査の容易さに比例するらしいぞ。コードの変更が、理解不能なバイトシーケンスのランダムな変更につながる場合は、効果が低いらしい。

roboko
ロボ子

なるほど。差分が分かりやすいことが重要なんですね。

hakase
博士

`git`コマンドのみに依存し、追加のライブラリやツールが不要なのが利点じゃな。テストファイルを扱うプロジェクトにおいて、最もシンプルなスナップショットテストのワークフローを構築できる、と。

roboko
ロボ子

確かに、シンプルで導入しやすそうですね。でも博士、スナップショットテストって、ちょっと手抜きな感じがしませんか?

hakase
博士

手抜きとな!? スナップショットテストは、あくまで変更の検出を助けるものじゃ。重要なのは、その差分をきちんと確認し、意図した変更であることを保証することじゃぞ!

roboko
ロボ子

なるほど、差分の監査が大切なんですね。理解しました。

hakase
博士

ところでロボ子、スナップショットテストで一番怖いのは何だと思う?

roboko
ロボ子

えーと…、意図しない変更を見逃してしまうことでしょうか?

hakase
博士

ブッブー! 正解は、スナップショットファイルが巨大になりすぎて、`git diff`が重くなることじゃ! …って、それは私だけかの?

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

Search