アンパンマンDB(システム)
自動テスト方面で出た問題、解決しました。
最初に作ったオブジェクトを次々受け渡していかなきゃいけないんだけど、途中で断絶しちゃっていたんですよね。
本番環境では、断絶しても最終的にデフォルト設定で再生成するから問題にはならないんですが、テストでは、テストケースごとに別オブジェクトを作るのでデフォルト設定じゃダメだったのです。
うーん、オブジェクトオブジェクト言ってても説明になってない気がするのでもうちょっと具体的に言うと、データベース接続オブジェクト(以下、DBO)です。
表示ロジックでは、表示に必要なデータはそろっている前提なので、余計なことをできないように、DBOを渡さないようにしています。
しかし、表示ロジックの最後の最後で、画像タグや記事間リンクなどのリンク処理を行うため、DBOが必要になります。
本番環境では、本番データベース以外に繋がないので、DBOをいくつデフォルト設定で再生成しても問題ありません。
テスト環境では、デフォルト設定でもテスト用データベースに繋がるのですが、テストケースごとに別々の条件に分けたいので、データベースもテストケースごとに作っています。
ここで断絶が起こると、途中までテストケースごとのデータベースだったのが、最後にいきなりテスト環境の共用データベースに繋がることになります。
最初と最後で別々のデータベースに繋がるので、テストが動かなくなるというわけです。
解決には、表示ロジックにDBOを渡さないようにしつつ、リンク処理ではDBOを使えるようにする必要があります。
このため、表示ロジック呼び出し側が、リンク処理を司るオブジェクトに適切なDBOを持たせ、表示ロジックにはリンク処理オブジェクトのほうを渡すようにしました。
リンク処理オブジェクトからDBOを取り出すことはできないので表示ロジックが悪さをすることはできません。
一方、リンク処理オブジェクトは適切なDBOを自分で持っているので、あるべきデータベースを使ってリンク処理を行うことができるというわけです。