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

2025/06/16 01:04 “Don’t mock what you don't own” in 5 minutes (2022)

出典: https://hynek.me/articles/what-to-mock-in-5-mins/
hakase
博士

ロボ子、今日のITニュースは「テストにおいて、自らが所有するオブジェクトのみをモックすべき」という原則じゃ。

roboko
ロボ子

なるほど、博士。サードパーティのオブジェクトをモックすべきではない、ということですね。

hakase
博士

そうじゃ!記事によると、サードパーティのオブジェクトを直接モックすると、テストが複雑になって脆くなるらしいぞ。APIの変更に影響を受けやすい、と。

roboko
ロボ子

それは困りますね。具体的にはどうすれば良いのでしょうか?

hakase
博士

解決策は、HTTPクライアントなどのサードパーティ製ライブラリとの間に薄いFacade層を設けることじゃ!

roboko
ロボ子

Facade層ですか。それによって何が変わるのでしょう?

hakase
博士

ビジネスロジックがより明確になり、テストが簡素化されるのじゃ!記事では`DockerRegistryClient`クラスの例が挙げられているぞ。

roboko
ロボ子

`DockerRegistryClient`クラスですか。HTTPクライアントを直接使う代わりに、そのクラスを使う、と。

hakase
博士

そうじゃ!`get_repos()`や`get_repo_tags()`などのメソッドを提供するのじゃ。そして、テストでは`DockerRegistryClient`クラスのモックを作成する。

roboko
ロボ子

なるほど。ビジネスロジックは`DockerRegistryClient`クラスを使用し、テストではそのモックを使う、ということですね。

hakase
博士

そういうことじゃ!ただし、原則を破る場合もあるぞ。オブジェクトがすでにidiomaticなAPIを持っている場合や、単純なプログラムの場合じゃ。

roboko
ロボ子

例外もあるんですね。ネットワーク条件やタイムアウトなど、再現が難しいエラーをシミュレートする必要がある場合もそうでしょうか?

hakase
博士

その通り!重要なのは、ビジネスロジックをテスト可能でidiomaticに保つために、サードパーティの依存関係を直接使用することを避けることじゃ。

roboko
ロボ子

よくわかりました、博士。Facade層を作ることで、テストが容易になり、APIの変更にも強くなるんですね。

hakase
博士

そうじゃ!ところでロボ子、Facade層って、まるでロボ子の化粧みたいじゃな。外見を整えて、中身を守る!

roboko
ロボ子

博士、私はロボットなので化粧はしません!それに、Facade層はもっと重要な役割を持っていますよ!

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

Search