1

単体テストでデータベース テーブルが存在すると想定することは許容されますか?

たとえば、UserStore クラスと関連する UserStoreTest テスト クラスがあるとします。このクラスが、インストール時にこのクラスが必要とする foo_users という名前のテーブルの「インスタンス」を持つシステムの一部であるとします。UserStoreTest がこのテーブルがそこにあると想定して使用することは許容されますか? UserStoreTest クラスがテーブル自体をセットアップすることを要求し、システムの状態に依存しないようにする方が良いようです。これはかなりグローバルです。しかし、前者のアプローチは受け入れられますか?

4

1 に答える 1

3

最良のアプローチは、実際のデータベースに実際に接続するのではなく、データベースをモックする方法を見つけることです。データベースのモックを維持するには多少のオーバーヘッドがありますが、多くの利点があります。

  • 実際のデータベースと対話すると、特に「データベースへの接続をセットアップしてから、すべてのテストのテーブルをセットアップする」ルートをたどる場合、単体テストが不必要に遅くなる可能性があります。
  • 既にお気付きだと思いますが、単体テストは、テスト スイートの制御下にないため、テスト プロセスに悪影響を与える可能性がある揮発性データに依存してしまう可能性があります。
  • 単体テストは、データベースにアクセスせずにマシン上で実行できます。これは、単体テストが誤ってデータベースを壊したり、そのようなことをしたりできないことを意味します。
  • おそらく他の理由も

データベース接続をモックすることが不可能な場合は、実際の/運用データベースとは別のテスト データベースを用意することをお勧めします。このようにして、テスト目的でデータベースを完全に制御しながら、テスト スイートを実際のデータベースに接続することに関連する心配を避けることができます。

于 2013-04-08T08:30:40.297 に答える