質問

プロジェクトのテスト環境に取り組んでおり、DbUnit.NETを使用して多くのデータベース相互作用テストを行うことを検討しています。ただし、非常に大きな質問が1つあります。

Oracleに対して実行しているため、すべての開発者に個別のテストDBインスタンスを設定することは実際には実行できません(特に、すでに時間が足りないDBAが1人しかいないため)。これは、すべての開発者と継続的インテグレーションサーバーがすべて同じDBスキーマを使用する必要があることを意味します。

では、次の質問に答えてください。複数の人が同時にテストするのを防ぐ良い方法はありますか?テストが実行されていることを示すレコードをdbテーブルに挿入し、テストの終了後に削除するのは簡単ですが、NUnitにはテストセッションの開始時と終了時に何かを実行する方法がありません。

他に考えはありますか?それはかなり一般的な問題であるように思えます...または誰もが実際にテストを実行する可能性のある開発者/テスターごとに個別のDBインスタンスを実行しますか?

役に立ちましたか?

解決

共有データベースで多数の開発者に対してデータベーステストを実行する際に、ロックトークンとして単一のレコードを持つダミーテーブルを使用しました。実際に各テストケースのロックを個別に取得したため、あるテストケースを実行したい開発者は、スイート全体を実行している別の開発者が完了するのを待つ必要はありません。各テストに独自のデータを設定しました-テストメソッド間での引き継ぎはありません。

他の誰かが既にテストを実行しているときに失敗するのではなく、データベースロックメカニズムを使用して実際にテストをキューに入れました。 Oracleのロックアルゴリズムは少し異なると思うので、それがどのように機能するかわかりません。

問題が発生した唯一の場所は、開発者がデバッグモードでテストをステップ実行したい場合です。これは、デバッガーをリリースするまでテストを実行したい他の開発者をブロックします。現在のユーザーの名前をダミーテーブルに書き込み、30秒以上ブロックされた場合にロックメカニズムにメッセージを出力させました:「Bobは現在テストを実行しており、最後の5分間です」

これは問題ありませんでしたが、維持するのに大変な作業でした。データベーステストの数を少なくし、ほとんどのテストをメモリ内の純粋な単体テストとして実行しようとしました。

他のヒント

[TestFixtureSetUp]属性を使用して、「true」をシミュレートする方法としてテストが実行されていることを示すフラグを挿入できます。セマフォ。

この問題といくつかの類似点がある問題で行ったこと:

プログラムには、関連するすべてのアイテムの前に追加された構成変数がありました。各ステーションには独自の設定があり、競合が発生しないように適切に設定されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top