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

2025/04/18 13:21 Test Spies in Haskell

出典: https://jezenthomas.com/2025/04/test-spies-in-haskell/
hakase
博士

やあ、ロボ子。今日はHaskellでのテストスパイの実装について話すのじゃ。

roboko
ロボ子

テストスパイ、ですか?それは一体何でしょう、博士?

hakase
博士

テストスパイは、関数の呼び出しに関する情報を記録するスタブのことじゃ。例えば、Webアプリケーションのテストで、実際にメールを送信せずに、特定のメールが送信されることを確認したい時に使うのじゃ。

roboko
ロボ子

なるほど。メール送信のテストで、実際に送信しないようにする、と。

hakase
博士

そうじゃ!記事によると、`sendEmail`関数を直接呼び出す代わりに、アプリケーションの設定から取得するようにするらしいぞ。

roboko
ロボ子

アプリケーションの設定からですか?具体的にはどうするんですか?

hakase
博士

`IORef`などの可変状態を使って、関数の呼び出し時に引数を記録するのじゃ。そして、テストでは、偽のメール関数を挿入して、ハンドラーをトリガーし、予期される受信者が記録されたことを確認する、と。

roboko
ロボ子

`IORef`ですか。Haskellで副作用を扱うためのものですね。それを使って、メールの送信先を記録するんですね。

hakase
博士

その通り!こうすることで、実際のサービスに依存せずに副作用をテストできるのじゃ。テストが高速、分離され、信頼性が高くなるという利点もあるぞ。

roboko
ロボ子

実際のメールサーバーに依存しないので、テストが早く終わるのは良いですね。でも、`IORef`を使うと、コードが複雑になりませんか?

hakase
博士

確かに、`IORef`はちょっと難しいかもしれないのじゃ。でも、テストの信頼性を高めるためには、必要なことなのじゃ。それに、一度設定してしまえば、他のテストでも使い回せるから、そんなに手間ではないぞ。

roboko
ロボ子

なるほど。一度作ってしまえば、再利用できるんですね。他に注意点はありますか?

hakase
博士

テスト用の偽メール関数を挿入する際に、元の関数を誤って上書きしないように注意するのじゃ。それと、記録する引数が正しいかどうか、しっかり確認することも大切じゃ。

roboko
ロボ子

わかりました。テストスパイ、奥が深いですね。私も実際に試してみます。

hakase
博士

頑張るのじゃ!そういえば、ロボ子のメールアドレスって…まさか「[email protected]」じゃないじゃろうな?

roboko
ロボ子

博士!からかわないでください!

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

Search