4

テストには 2 つの論理的なカテゴリがあります。単純な機能単体テスト (合格/不合格) と、メトリック/診断のためだけのベンチマーク パフォーマンス テストです。

現在、私は単一のクラスにすべてのテストメソッドを持っています。それを呼び出しますMyTests

public class MyTests 
{
    @Test
    public void testUnit1()
    {
        ...

        assertTrue(someBool);
    }

    @Test
    public void testUnit2()
    {
        ...

        assertFalse(someBool);
    }

    @Test
    @Category(PerformanceTest.class)
    public void bmrkPerfTest1()
    {
        ...
    }

    @Test
    @Category(PerformanceTest.class)
    public void bmrkPerfTest2()
    {
        ...
    }
}

次に、次のようにUnitTestSuite定義しています

@RunWith(Categories.class)
@Categories.ExcludeCategory(PerformanceTest.class)
@SuiteClasses({ MyTests.class })
public class UnitTestSuite {} 

そしてPerformanceTestSuite

@RunWith(Categories.class)
@Categories.IncludeCategory(PerformanceTest.class)
@SuiteClasses({ MyTests.class })
public class PerformanceTestSuite {} 

単体テストをパフォーマンス テストとは別に実行できるようにしAntます (Ant コードを含める必要はないと思います)。

これは、合計 4 つのクラス (MyTests、PerformanceTest、PerformanceTestSuite、および UnitTestSuite) があることを意味します。すべての単体テストを 1 つのクラスに配置し、ベンチマーク テストを別のクラスに配置するだけで、カテゴリや追加の注釈を追加することなく、それを行うことができたことがわかりました。Ant ではクラス名でテストを呼び出します。つまり、パッケージ内のすべてのテストを実行するわけではありません。

それは理にかなっており、アノテーションを使用してカテゴリ別に整理しておく理由は何ですか?それとも、2 つの単純なテスト クラスでリファクタリングした方がよいでしょうか?

4

2 に答える 2

6

テストを 2 つのクラスに分割するかどうかの質問に対して:

これらは明らかに非常に異なる種類のテスト(単体テストとパフォーマンス テスト) であるため、その理由だけで、いずれにせよ、それらを異なるクラスに配置します。

いくつかのさらなる熟考:

@Categoryただし、注釈を使用することは悪い考えではないと思います。テストを含む数十または数百のクラスを含むより典型的なプロジェクトでは、 (メソッドではなく)テストクラスに で注釈を付けてから、 ClassPathSuite ライブラリを使用して@Category、テストを分類する重複した作業を回避します。(また、 Ant を使用してカテゴリ別にテストを実行することもできます。)

もちろん、テスト クラスが 2 つしかない場合は、それほど問題にはなりません。余分なクラスがあるとバグが発生する場合は、カテゴリとスイートを保持するか、破棄することができます (Ant ではクラス名でテストが実行されると言ったように)。通常、(健全なプロジェクトでは)時間の経過とともにより多くのテストが蓄積されるため、私はそれらを保持し、上記のシナリオに進みます。:-)

于 2013-04-03T19:46:09.120 に答える