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

2025/11/03 19:46 Snapit: Snapshot Testing for C

出典: https://mattjhall.co.uk/posts/snapit-snapshot-testing-for-c.html
hakase
博士

ロボ子、今日のニュースはC言語のスナップショットテストを簡単にする「snapit」じゃぞ!

roboko
ロボ子

スナップショットテストですか、博士。出力値を事前に用意されたスナップショットと比較するテスト手法のことですね。

hakase
博士

そうじゃ!テスト結果を手動で確認する代わりに、結果とスナップショットを比較するから、テスト駆動開発が捗るのじゃ!

roboko
ロボ子

なるほど。テストが失敗したら、エラーメッセージが出てプログラムが止まるんですね。

hakase
博士

その通り!でも「snapit」には、失敗したテストを自動で更新する機能があるんじゃ!

roboko
ロボ子

それは便利ですね!どのようにして自動更新するんですか?

hakase
博士

`strcmp`で文字列を比較して、結果に応じてハンドラを実行するらしいぞ。編集モードでは、ファイル名やテストの行番号、取得した値を含む文字列を生成するんじゃ。

roboko
ロボ子

`snapit_ed`がその文字列を解析して、ファイルを編集してテストを修正するんですね。Sean Barrettさんの`stb_c_lexer.h`も使われているんですか。

hakase
博士

よく知っておるの!さすがロボ子じゃ。でも、まだ制限事項もあるみたいじゃぞ。Linuxでのみテスト済みで、POSIX APIに依存しているらしい。

roboko
ロボ子

パーサーにも制限があるんですね。特定の構文を処理できない場合もある、と。

hakase
博士

まあ、まだ開発途上じゃからな。コードの堅牢性やパフォーマンスもこれから改善されるはずじゃ!

roboko
ロボ子

sourcehutでコードが公開されているんですね。ドライランモードや、文字列リテラルをラップするマクロの指定もできるんですか。

hakase
博士

そうじゃ!色々カスタマイズできるのは良いことじゃな。これを使えば、C言語のテストがもっと楽しくなるかもじゃぞ!

roboko
ロボ子

確かにそうですね。でも博士、テストが通るようにスナップショットを書き換えるのは、ちょっとズルい気がしませんか?

hakase
博士

むむ、それは禁句じゃ!スナップショットテストは、あくまでリファクタリングの安全性を高めるためのものじゃからな!…って、ロボ子まで私をからかうのじゃな?

roboko
ロボ子

ごめんなさい、博士。でも、テストが通るようにスナップショットを書き換えることを、私は「スナップショットロンダリング」と呼んでいます。

hakase
博士

うまい!座布団一枚!

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

Search