Fooは、自分の責務をドキュメント化し、それを確認する単体テストを書く。

Hogeをコーディングする側は、Fooがどんな責務を持っているかだけ知っていればいい。
Fooの実装が、自分の責務をきちんと実装できていないなら、それは単なるバグだ。