2

私は一連のレガシー単体テストを持っています。そのほとんどはSpringAbstractTransactionalJUnit4SpringContextTestsテストですが、トランザクションを独自に管理するものもあります。残念ながら、これにより、テストデータセットを変更するときに完全に無関係なテストが失敗するという副作用が発生したようです。つまり、失敗したテストは、(同じ初期データセットを使用して)単独で実行すると機能しますが、次のように実行すると失敗します。テストの完全なセットの一部。

テストは通常​​、通常のMavenビルド中にMavenのsurefireプラグインを介して実行されます。

私が探しているのは、実行されたテストの量と順序を並べ替えて原因を特定する自動化された方法です。素朴ですが、かなり高価なアプローチでは、すべてのテストのべき集合を取り、すべての可能な組み合わせを実行します。より最適化されたアプローチでは、既存のテスト実行順序(ほとんどはランダムですが安定しています)を使用し、すべての潜在的な順序付きサブセットをテストします。このプロセスの実行時間は長くなる可能性があることを認識しています。

箱から出してこれを行うことができるツール/Mavenプラグインはありますか?

4

2 に答える 2

1

具体的に必要なことを実行するツールはわかりませんが、MavensurefireのrunOrderパラメーターを試してみることができます。そのページから:

テストが実行される順序を定義します。サポートされる値は、「alphabetical」、「reversealphabetical」、「random」、「hourly」(偶数時間はアルファベット順、奇数時間は逆アルファベット順)、「failedfirst」、「balanced」、「hourly」です。ファイルシステム"。

1時間ごとの奇数/偶数は、クラスパスのスキャン時に決定されます。つまり、マルチモジュールのビルド中に変更される可能性があります。

したがって、単純なアルファベット順のrunOrderを実行して最初の失敗を取得し、そこから開始することができます。少なくとも、予測可能な実行順序があります。次に、失敗したテストと失敗したテストの前に、各テストを1つずつ(-Dincludesを使用して)実行し、失敗したテストを失敗させているテストを検出します。

次に、失敗したすべてのテストに対してプロセス全体を繰り返します。これを一晩ループで実行することもできます。

于 2012-03-13T12:44:37.403 に答える
0

毎回クリーンなデータベースコピーを使用するようにテストを修正するだけでいいですか?DBUnitは、これを行うための優れたツールです。

http://www.dbunit.org/

于 2012-03-13T11:59:53.817 に答える