こんにちは私のプロジェクトでは、何百ものテストケースがあります。これらのテストケースは、すべてのチェックイン時にトリガされるビルドプロセスの一部です。このプロジェクトはかなり大きく、 5年以上続いています。
テストケースが非常に多く、1時間以上かかる場合があります。テストケースの一部が正しく構成されていないため、リファクタリングした後に実行時間を大幅に短縮できましたが、何百ものテストケースがあり、ひとつひとつがあまりにも多すぎるようです。
私はテストケースのいくつかを実行します(実際には実行に時間がかかります)。これは夜間のビルドの一部としてのみで、すべてのチェックインの一部としては実行されません。
他の人がこれをどのように管理しているか、私は不思議です。管理方法TDDでのビルド時間
答えて
「レガシーコードを有効に使う」と言っていたのは、テストスイートが2分以上かかると、開発者をあまりにも遅くして、テストが無視され始めると彼は言ったと思います。あなたがその罠に落ちているように聞こえる。
データベースに対してテストケースを実行していますか?それがパフォーマンス問題の最大の原因です。原則として、可能であれば、テストケースはI/Oを行うべきではありません。 Dependency Injectionでは、データベースオブジェクトをコードのデータベース部分をシミュレートするモックオブジェクトで置き換えることができます。これにより、コードをデータベースが正しくセットアップされているかどうかにかかわらずテストすることができます。
Michael FeathersのWorking Effectively with Legacy Codeを強くお勧めします。彼は、一度にすべてのコードをリファクタリングすることなく、あなたが走っているように見える頭痛の多くを処理する方法について議論します。
UPDATE:
A別の可能なヘルプがNDbUnitようなものになるだろう。私はまだ広範囲に使用していませんが、それは有望に見えます:http://code.google.com/p/ndbunit/
おそらく、あなたのoracleデータベースを維持することを検討することができますが、それはテストデータだけを含んでいるので、大きくする必要はありません。
私たちは約1000件のテストを行っており、RESTとヒットしているデータベースの大部分がテストしています。合計実行時間は約8分です。時間は過度だと思われますが、私はあなたが何をしているのか、あなたのテストがどれほど複雑であるのか分かりません。
しかし、私はあなたを助ける方法があると思います。私たちはTeamCityを使用しており、複数のビルドエージェントを持つことができます。あなたができることは、テストプロジェクトをサブプロジェクトに分割することです。サブプロジェクトごとにいくつかのテストだけが含まれています。 JNunit/NUnitカテゴリを使用してそれらを区切ることができます。次に、各エージェントが1つのタイプのサブプロジェクトを構築するようにTeamCityを構成します。こうすることで、テストの並列実行が可能になります。少数のエージェント(あなたは3人が無料です)では、20分に達することができます。各エージェントをVMに入れると、追加のマシンを必要としないかもしれません。たくさんのRAMが必要です。
- 1. サービス時間管理
- 2. 時間の保管方法
- 3. 管理方法ビルド構成とプロビジョニングプロファイル/スキーム
- 4. JenkinsでMavenの同時ビルドを処理する方法は?
- 5. スレッド間でのメモリ管理
- 6. ビルド時間を短縮する方法/ XCodeでコンパイル時間を短縮する方法はありますか?
- 7. リモートデータベース管理方法?
- 8. SVNでバイナリファイルのバージョン管理を管理する良い方法
- 9. GraphicsPath.AddStringで文字間隔を管理する方法は?
- 10. Visual Studioのビルド時間を短縮する方法
- 11. htmlページにantのビルド時間を挿入する方法
- 12. ビルド、ソース管理、インテグレーションサーバの監視システム
- 13. リリースブランチの管理方法
- 14. オープンソースプロジェクトの管理方法
- 15. djangoの管理方法
- 16. バックグラウンドレンダリングの管理方法
- 17. OWBのセキュリティ管理方法
- 18. マルチテーブルデータベースの管理方法は?
- 19. バージョン間のインターフェイスの変更 - 管理方法
- 20. TFS APIのユーザー権限 - ビルドの開始、ビルドの管理
- 21. Ruby on Rails - 管理インターフェースでレイアウトを管理する方法は?
- 22. ナビゲート時にインスタンスの作成を管理する方法
- 23. 実行時に複数のpageIndicatorを管理する方法
- 24. 、アクティブな管理の表示時間のみとdefault_actionsのテキストアライメント
- 25. Rubyの管理者によるユーザーの管理方法
- 26. 継続的な統合ビルド - バージョン管理
- 27. ウェブフォームでの処理時間を短縮する方法
- 28. 複数のgitバージョン管理リポジトリを管理する方法は?
- 29. asp.net mvc 3アプリケーション内のビュー管理を管理する方法
- 30. エクストリームプログラミングの時間を管理するには?
dbバインドテストの別の解決策は、メモリ内のデータベースを使用することです。これには明らかに新しい一連の問題がありますが、解決策であり、成功は1つのRDBMS実装にどれくらいのコードが依存しているかによって左右されます。 –
Oracleから離れる計画はないので、単なるRDBMSの実装については心配していません。
すべてのdb制約をmeyour Dbに設定し、Syncを実際のdbに設定することだけが心配です。
注:私のtest envと実際のprod envが同期するように、Oracleに近いmemeroy Dbの任意のものを指すことができます。 – Khangharoth