現在、自分のコードに対して別のプロジェクトの JUnit 4 テストを再利用しています。自動化された Ant ビルドの一部として、他のプロジェクトのリポジトリから直接それらを取得します。これは、最新バージョンのテストに対してコードをグリーンに保つことができるため、素晴らしいことです。
ただし、私のコードで絶対に渡さないと思われるテストのサブセットがあります。しかし、これらのテストに @Ignore アノテーションを追加し始めると、テスト実装の独自の別のコピーを維持する必要があり、これは本当にやりたくないことです。
テスト ソースを変更せずに個々のテストを除外する方法はありますか? これが私がこれまでに見たものです:
私が見る限り、Ant JUnit タスクでは、個々のテスト メソッドではなく、テスト クラス全体を除外することしかできません。
リフレクションを使用して元のテストをすべて動的に検索して追加し、実行したくないテストを明示的に削除するコードを追加する TestSuite をまとめることを検討しました。しかし、 TestSuite APIがテストを削除する方法を提供していないことに気付いたとき、私はその考えを捨てました。
元の Test クラスを拡張する独自の Test クラスを作成し、実行したくない特定のテストをオーバーライドして、@Ignore で注釈を付けることができます。次に、サブクラスで JUnit を実行します。ここでの欠点は、新しい Test クラスが元のプロジェクトに追加された場合、それらを自動的に取得しないことです。新しい Test クラスが元のプロジェクトに追加されるのを監視する必要があります。これはこれまでのところ私の最良の選択肢ですが、理想的ではありません。
私が考えることができる他の唯一のオプションは、とにかく悪いテストを実行し、失敗を無視することです. ただし、これらのテストは実行に時間がかかる (そして失敗する!) ため、まったく実行しないことをお勧めします。さらに、特定のテスト メソッドの失敗を無視するように Ant タスクに指示する方法がわかりません (繰り返しますが、個々のテスト クラスに対してそれを行う方法はわかりますが、メソッドについてはわかりません)。