2009-05-30 20 views
3

こんにちは私のプロジェクトでは、何百ものテストケースがあります。これらのテストケースは、すべてのチェックイン時にトリガされるビルドプロセスの一部です。このプロジェクトはかなり大きく、 5年以上続いています。
テストケースが非常に多く、1時間以上かかる場合があります。テストケースの一部が正しく構成されていないため、リファクタリングした後に実行時間を大幅に短縮できましたが、何百ものテストケースがあり、ひとつひとつがあまりにも多すぎるようです。
私はテストケースのいくつかを実行します(実際には実行に時間がかかります)。これは夜間のビルドの一部としてのみで、すべてのチェックインの一部としては実行されません。
他の人がこれをどのように管理しているか、私は不思議です。管理方法TDDでのビルド時間

答えて

3

「レガシーコードを有効に使う」と言っていたのは、テストスイートが2分以上かかると、開発者をあまりにも遅くして、テストが無視され始めると彼は言ったと思います。あなたがその罠に落ちているように聞こえる。

データベースに対してテストケースを実行していますか?それがパフォーマンス問題の最大の原因です。原則として、可能であれば、テストケースはI/Oを行うべきではありません。 Dependency Injectionでは、データベースオブジェクトをコードのデータベース部分をシミュレートするモックオブジェクトで置き換えることができます。これにより、コードをデータベースが正しくセットアップされているかどうかにかかわらずテストすることができます。

Michael FeathersのWorking Effectively with Legacy Codeを強くお勧めします。彼は、一度にすべてのコードをリファクタリングすることなく、あなたが走っているように見える頭痛の多くを処理する方法について議論します。

UPDATE:

A別の可能なヘルプがNDbUnitようなものになるだろう。私はまだ広範囲に使用していませんが、それは有望に見えます:http://code.google.com/p/ndbunit/

+0

dbバインドテストの別の解決策は、メモリ内のデータベースを使用することです。これには明らかに新しい一連の問題がありますが、解決策であり、成功は1つのRDBMS実装にどれくらいのコードが依存しているかによって左右されます。 –

+0

Oracleから離れる計画はないので、単なるRDBMSの実装については心配していません。
すべてのdb制約をmeyour Dbに設定し、Syncを実際のdbに設定することだけが心配です。
注:私のtest envと実際のprod envが同期するように、Oracleに近いmemeroy Dbの任意のものを指すことができます。 – Khangharoth

0

おそらく、あなたのoracleデータベースを維持することを検討することができますが、それはテストデータだけを含んでいるので、大きくする必要はありません。

0

私たちは約1000件のテストを行っており、RESTとヒットしているデータベースの大部分がテストしています。合計実行時間は約8分です。時間は過度だと思われますが、私はあなたが何をしているのか、あなたのテストがどれほど複雑であるのか分かりません。

しかし、私はあなたを助ける方法があると思います。私たちはTeamCityを使用しており、複数のビルドエージェントを持つことができます。あなたができることは、テストプロジェクトをサブプロジェクトに分割することです。サブプロジェクトごとにいくつかのテストだけが含まれています。 JNunit/NUnitカテゴリを使用してそれらを区切ることができます。次に、各エージェントが1つのタイプのサブプロジェクトを構築するようにTeamCityを構成します。こうすることで、テストの並列実行が可能になります。少数のエージェント(あなたは3人が無料です)では、20分に達することができます。各エージェントをVMに入れると、追加のマシンを必要としないかもしれません。たくさんのRAMが必要です。

関連する問題