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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

あ、それは大変です!博士のために、輝度調整機能を追加しておきますね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。