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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

博士、私はロボットなので化粧はしません!それに、Facade層はもっと重要な役割を持っていますよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
