17

実行に1週間かかる、非常に遅いテストのセットがあります。(彼らは文字通り、約 1 週間ノンストップでいくつかのコードを実行します)。

当然のことながら、開発者 (またはデフォルトのビルド ジョブでさえも) は、これらのテストを実行したくありません。それらを実行する時間があるのは、特定の個別のビルド ジョブだけです。したがって、これらのテストはデフォルトで無効にする必要があります

JUnit のカテゴリはこれに最適なように思えました。私はこれらの遅いテストに@Category(SlowTests.class). 問題は、次の理由でまだ実行されていることです。

  • 毎日テストを追加するため、TestSuite クラスを維持したくありません。TestSuite クラスが 0 個あります。Maven、IntelliJ、および Eclipse は、モジュールからすべての Test クラスを実行するだけです。それらすべての遅いテストを含みます。
  • TestSuite クラスがあったとしても、オープンソースの貢献者のほとんどは、IntelliJ または Eclipse からすべての Test クラスを実行しようとし、ハングしたと考えてテストの実行を断念します。これらの遅いテストは、デフォルトで除外する必要があります。できれば、IntelliJ または Eclipse で追加の構成を行わないでください。

明示的な TestSuite を使用せずに、デフォルトで遅い JUnit テストのカテゴリを除外するにはどうすればよいですか?

4

3 に答える 3

10

これは、Maven、IntelliJ、および Eclipse でデフォルトで機能します

import static org.junit.Assume.assumeTrue;

@Test
public void mySlowTest() {
    assumeTrue("true".equals(System.getProperty("runSlowTests")));
    ...
}

とにかくそれらを実行するには、単純に VM 引数を追加します-DrunSlowTests=true

意味的に言えば、それは完全に間違っています。しかし、それは機能します:)

于 2013-04-08T14:04:55.320 に答える
7

私の知る限り、Eclipse がデフォルトで特定のテストを実行するのを防ぐ方法はありません。

Maven から特定のカテゴリを実行するのは簡単です。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <excludedGroups>${tests.exclude}</excludedGroups>
    </configuration>
</plugin>

そしてtests.exclude、特定の Maven プロファイルで定義します。

JUnit でテスト スイートを維持することは、ブログ投稿で書いたように、現在のバージョンの JUnit では非常に手間がかかります。また、cpsuite というライブラリがスイートの管理を自動的に行う方法についても、次のように説明します。

@RunWith(ClasspathSuite.class) // Loads all unit tests it finds on the classpath
@ExcludeBaseTypeFilter(SlowTest.class) // Excludes tests that inherit SlowTest
public class FastTests {}

ただし、どちらの方法でも、Eclipse はデフォルトで、@Test注釈を含むすべての Java ファイルを実行するだけです。

于 2013-04-08T13:22:25.280 に答える
1

実行速度の遅いテストから統合テストを作成してみませんか。異なる命名規則を介してそのようなケースを処理する maven-failsafe-plugin を使用します。たとえば、*IT.java は Themen long runnin test です。さらに、アクティベーションをプロフィルに入れることをお勧めします。これにより、誰もがそれらのテストを実行するかどうかを制御できるようになり、どちらがデフォルトである必要がありますか

于 2013-04-08T10:14:33.927 に答える