2012-03-22 20 views
2

SQL Developerは、DMLのユニットテストをサポートしていますが、私はDDLのためのユニットテストを作成する方法を発見していませんでした。この問題に対する良いアプローチは何でしょうか?私が始めているスキーマは小さく、水平線上の大規模なプロジェクトを含む数十ものテーブルより少ない。 Googleは単体テストのDDLへの適用にあまり戻っていません。ユニットテストDDLのために存在するDDLやその他のツールをテストするアプローチに関するアイデア?ユニットテストDDL SQL Developerを使用した3.1

答えて

0

あなたはDDLについてテストするために何をしたいですか?テーブルが定義どおりに作成されるか、作成されません。

あなたができることは、データディクショナリを照会してテーブルが存在しているかどうかを確認する一連のテストを作成し、必要なサイズとデータ型を持つカラムを持つことです。これは単体テストしかし、私はそれがどれほど価値があるかは分かりません。

スキーマのビルドスクリプト(またはスキーマにオブジェクトを追加するための新しいオブジェクトを追加するには、移行のシリーズ)を維持した場合、それはあなたがそれが定義されたようにスキーマが作成されている知っているエラーなしで適用された場合。

ストアドプロシージャがある場合、スキーマが100%正しくない場合、プロシージャの一部がコンパイルに失敗します。プロシージャをきれいに取得することは、スキーマのもう1つの検証ステップです。

最後に、あなたがDMLとストアドプロシージャをテストするために書くのユニットテストは、正しいデータが正しいテーブルに入っていることを確認します。

あなたはいくつかのテストは、表が特定の値のみを受け入れることができますまたは列がなどユニークであることを保証したい場合があります(つまり、制約が正しいテスト)が、それはあまりにもダウン標準ユニット・テストになります。

私は、DBのコードの書き込みユニットテストで大きな信者だが、私はそれを行うためのSQL開発者GUIのアプローチを好きではありません。今はアプリケーションのテストを書いていますが、Rubyでテストをコーディングしていますが、うまくいくようです。ビルドと自動化されたテストプロセスにも簡単に組み込むことができます。

もう1つの選択肢は、これまで私が使用していたUT_PLSQLですが、単純にPLSQLの性質によってテストが非常に冗長になるため、私は現在のプロジェクトでRubyを使用することにしました。

+0

例えば、外部キーと制約は、おそらくユニットテストを受けるべきであるたくさんのロジックを含んでいます。 –

0

これは古い質問ですが、私は最近、同じ問題を解決するために取り組んでいます。私は、オブジェクトを作成する前にDDLのテストを定義し、それらのテストに合格するオブジェクトを作成すると便利だと思います。

私は、表が存在しない場合には例外を発生させ、そうでない場合には自動的に実行されるアサートの「パターン」 - つまりtdd.ddlunit.assert_tableexists(p_schema_name、p_table_name)を使用しています。

私が作成した他のアサーションは、すべてのvarchar2カラムがバイト長のセマンティクスではなく文字セマンティクスを使用し、すべてのテーブルとカラムにコメントが付いていることを確認するなどのためのものです。

これらはコードリポジトリにチェックインされ、継続的な統合フレームワークによって実行され、期待どおりの有効なデータベースがあることを確認できます。

関連する問題