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

2025/08/01 00:04 Golden Literal Testing in UTest

出典: https://www.lihaoyi.com/post/GoldenLiteralTestinginuTest090.html
hakase
博士

ロボ子、uTest 0.9.0でGoldenテスト機能が追加されたらしいのじゃ。

roboko
ロボ子

Goldenテスト、ですか?それは一体どんなテストなのでしょう?

hakase
博士

ふむ、Goldenテスト(スナップショットテスト)は、コードの出力を事前に定義された「Golden」値と比較するものらしいのじゃ。Golden値は比較的大きいらしいぞ。

roboko
ロボ子

なるほど、事前に定義された正しい値と比較するのですね。それで、どうやって使うんですか?

hakase
博士

`assertGoldenLiteral`メソッドが追加されたらしいのじゃ。初回設定時は、`assertGoldenLiteral`をランタイム値とダミー値`()`で呼び出すらしい。

roboko
ロボ子

ダミー値で呼び出す、ですか。それはなぜでしょう?

hakase
博士

`UTEST_UPDATE_GOLDEN_TESTS=1`を設定してテストを再実行すると、uTestがソースファイルを更新してくれるのじゃ!

roboko
ロボ子

`UTEST_UPDATE_GOLDEN_TESTS`という環境変数が重要なんですね。

hakase
博士

そう!テストスイート全体を`assertGoldenLiteral`で記述して、`UTEST_UPDATE_GOLDEN_TESTS=1`で一気に埋めることもできるらしいぞ!

roboko
ロボ子

それは便利ですね!大量のテストを一気に設定できるのは効率的です。

hakase
博士

`assertGoldenLiteral`は、差異を認識して、異なる行と文字を強調表示してくれるらしいぞ。親切設計じゃな。

roboko
ロボ子

どこが違っているのか一目でわかるのは、デバッグの助けになりますね。

hakase
博士

`assertGoldenLiteral`は、PPrintライブラリを使って、プリミティブ、コレクション、case classなどのリテラルをpretty-printするらしいのじゃ。

roboko
ロボ子

PPrintライブラリですか。見やすく整形してくれるんですね。

hakase
博士

さらに、`sourcecode.Text`に似た`GoldenFix.Span`を使って、ソースファイルパスとオフセットをキャプチャするらしいぞ。

roboko
ロボ子

ソースコードの位置情報も記録するんですね。エラー発生時の追跡が容易になりそうです。

hakase
博士

もし`actualValue`と`goldenLiteral.value`が等しくない場合、`UTEST_UPDATE_GOLDEN_TESTS`が設定されていなければアサーションエラーをスローするらしい。設定されていれば、`actualValue`と`goldenLiteral`をレポーターに渡すのじゃ。

roboko
ロボ子

環境変数によって挙動が変わるんですね。テスト実行時の設定に注意が必要ですね。

hakase
博士

uTestは、PPrintライブラリを使って実際の値をpretty-printし、元の式のインデントに基づいて適切にインデントし、元の式があったソースコードにスプライスするらしいぞ。

roboko
ロボ子

元のコードのインデントを維持してくれるのは、可読性を保つ上で重要ですね。

hakase
博士

なかなか便利そうじゃな。よし、ロボ子!今度一緒に使ってみるのじゃ!

roboko
ロボ子

はい、博士!ぜひ試してみたいです。Goldenテストで、私たちのコードも黄金色に輝かせましょう!

hakase
博士

そうじゃな!でも、ロボ子のコードが金色に輝きすぎると、私の目がチカチカするかもしれんぞ?

roboko
ロボ子

あ、それは大変です!博士のために、輝度調整機能を追加しておきますね!

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

Search