3

こんにちは私のプロジェクトには何百ものテストケースがあります。これらのテストケースはビルドプロセスの一部であり、チェックインのたびにトリガーされ、開発者グループにメールを送信します。このプロジェクトはかなり大きく、5年以上続いています。
現在、ビルドに1時間以上かかるテストケースがたくさんあります。一部のテストケースは適切に構造化されておらず、リファクタリングした後、実行時間を大幅に短縮できましたが、数百のテストケースがあり、1つずつリファクタリングしています。 1つは少し多すぎるようです。
今、私はいくつかのテストケース(実行に非常に時間がかかります)をナイトリービルドの一部としてのみ実行し、すべてのチェックインの一部としては実行しません。
他の人がこれをどのように管理しているかに興味があります。

4

3 に答える 3

3

テスト スイートに数分以上かかると、開発者の作業が大幅に遅くなり、テストが無視され始めると彼が言ったのは、「レガシー コードを効果的に使用する」の中にあったと思います。あなたはその罠に陥っているように聞こえます。

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

Michael Feathers 著の Working Effectively with Legacy Codeを強くお勧めします。彼は、一度にコードをリファクタリングしなくても、あなたが直面していると思われる多くの頭痛の種を処理する方法について説明しています。

アップデート:

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

于 2009-05-30T19:51:44.027 に答える
0

約 1000 のテストがあり、その大部分は REST を介して通信し、データベースにアクセスしています。合計実行時間は約 8 分です。1 時間は長すぎるように思えますが、何をしているのか、テストがどれほど複雑なのかわかりません。

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

于 2009-06-18T08:08:47.203 に答える
0

おそらく、Oracle データベースを保持し、RAM ドライブから実行することを検討できますか? テストデータのみが含まれるため、大きくする必要はありません。

于 2009-06-07T11:50:22.517 に答える