5

大規模なデータベースアーキテクチャを設計するだけです。これには、一連のテーブル、いくつかのビュー、およびかなりの数のストアドプロシージャが含まれます。これはより大きなタイプのデータベースであり、開発の非常に初期の段階(実際にはまだ設計の初期段階にすぎません)であるため、リファクタリング中に整合性を検証するためのテストスイートの必要性を感じます。

サーバー側(主にPHPUnit)とクライアント側(SeleniumとAndroidのテストインフラストラクチャ)の両方で、アプリケーションロジックに関する限り、テストの概念に精通しています。

しかし、データベースアーキテクチャをテストするにはどうすればよいですか?

  • 一般的なデータベース、特にMySQLに対して、ある種の同様のテスト戦略とツールはありますか?

  • ビュー、ストアドプロシージャ、トリガー、および神が知っていることを確認するにはどうすればよいですか?基になるテーブルを変更した後も有効なものは何ですか?

  • データベースロジック(ストアドプロシージャ、トリガーなど)のテストを可能にするために、たとえばPHPレイヤーでデータベースをラップする必要がありますか?

4

2 に答える 2

4

データベーステストには2つの側面があります。

  • 1つは、ビジネスロジックの観点からデータベースをテストすることを目的としており、永続化されたデータに関係するべきではありません。そのレベルには、よく知られている手法であるORMがあります。この場合のアルゴリズムは単純です。モデルを記述し、一連の一意のケースまたは基準を作成して、すべてのカスケードアクションが正常に実行されるかどうかをテストします(つまり、セッションを保存した後、すべてのエンティティを取得するよりも、モデルを作成Productしてリンクすると、Categoryの間で必要なすべての関係を含むDBで記述されています。さらに言えば、一部のORMはすでにユニットテストモジュールを提供しています(たとえば、NHibernate)およびそれらのいくつかはさらにクールなツールです。データベーススキーム、モデル、テストケースを作成するための最も簡単で最速の方法:たとえば、FluentNHibernate

  • 2つ目は、データベーススキーマ自体のテストを対象としています。その目的のために、あなたは良いライブラリDbUnitを見ることができます。公式サイトからの引用:

DbUnitは、データベース駆動型プロジェクトを対象としたJUnit拡張機能(Antでも使用可能)であり、特に、テスト実行の間にデータベースを既知の状態にします。DbUnitには、データベースデータをXMLデータセットとの間でエクスポートおよびインポートする機能があります。バージョン2.0以降、DbUnitは、ストリーミングモードで使用すると、非常に大きなデータセットでも機能します。DbUnitは、データベースデータが予想される値のセットと一致することを確認するのにも役立ちます。

最後に、MartinFowlerのサイトにある「EvolutionaryDatabaseDesign 」の記事を読むことを強くお勧めします。少し時代遅れですが(2003年)、それでも実際に読む価値があります。

于 2012-06-09T06:28:45.857 に答える
2

データベースをテストするには、次のものが必要になります。

  1. すべてのデータテストケース、初期データなどを含むテストデータベース。これにより、毎回既知の開始位置からテストできるようになります。
  2. テストする状態を介してデータベースを移動する一連のトランザクション(INSERT、DELETE、UPDATE)。これら自体をテストデータベースに保存できます。
  3. アクションの結果を実際にチェックする一連のテスト-データベース上のクエリとして表されます。これらの結果は、テストスイートによってテストされます。
  4. データベースによって例外がスローされる可能性がありますが、例外が発生した場合は、データベースとデータにさらに深刻な懸念が生じる可能性があります。同様の方法でデータベースの動作をテストできますが、最新のデータベースエンジンはデータ提供のタスクで非常に堅牢であるため、「コーナーケース」を除いて、これはそれほど必要ではありません。

データベースをPHPレイヤーでラップする必要はありません。上記の構造に従うと、実際のデータベースのDMLおよびDDLにある完全なテストスイートを通常のテストスイートと組み合わせることができるはずです。

于 2012-06-09T06:24:53.367 に答える