14

私は現在 JUnit 4 を使用しており、テストを任意の組み合わせで選択的に実行できるグループに分割する必要があります。TestNG にはテストに注釈を付けてグループに割り当てる機能があることは知っていますが、今のところ TestNG に移行できません。これは、いくつかのカスタム アノテーションとカスタム JUnit TestRunner を使用して、JUnit で簡単に実現できるようです。JUnit ドキュメントと Web の両方をチェックしましたが、そのようなものは見つかりませんでした。そのような TestRunner を知っている人はいますか?

更新: テスト スイートに関するご返信ありがとうございます。元の質問でこれらに対処する必要がありました。では、テスト スイートを使用したくありません。手動で作成して管理する必要があるためです。つまり、すべてのテストに手を加えて手動でスイートに配置する必要があります (作業が多すぎて、メンテナンスの悪夢です)。私がする必要があるのは、実際には統合テストであるいくつかを除いて、すべての単体テストを実行することだけです。したがって、これらに注釈を付けて、他のすべてを実行したいと思います。また、統合テストだけを実行したい場合もあります。また、単体テストを複数のグループに入れる必要がありますが、これはスイートでは不可能です。これが問題を解決するのに役立つことを願っています。

更新 2: JUnit にこの OOB がない場合、これを JUnit に追加するオープン ソース ライブラリを探しています (注釈 + カスタム JUnit テスト ランナー)。

4

9 に答える 9

11

JUnit には現時点でそのようなランナーはありません。限られた時間内にテストスイートから合理的な保証を得る必要があるという根本的な問題に対処することは、次のリリースの開発における最優先事項です。それまでの間、注釈を介して機能する Filter を実装することは、大きなプロジェクトではないように思えますが、私には偏見があります。

于 2008-09-30T15:21:53.460 に答える
6

Spring のSpringJUnit4ClassRunnerを確認してください。IfProfileValueアノテーションを使用して、システム プロパティに基づいてオプションでテストを実行するために使用しました。

これ:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

システム プロパティ 'test-groups' が 'unit-tests' または 'integration-tests' に設定されている場合に実行されます。

更新: JUnitExtには注釈が@Categoryあり@Prerequisite、必要なことを行う必要があるように見えます。ただし、自分で使ったことがないので保証はできません。

于 2008-09-30T15:24:55.153 に答える
3

まず、単体テスト (多くの場合、テスト対象の単体と同じパッケージ内) と統合テストという 2 つの問題に対処します。私は通常、統合テストを com.example.project.tests のような別のパッケージに保存します。日食では、私のプロジェクトは次のようになります。

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

パッケージを右クリックして「実行」を選択すると、パッケージ内のテストが実行されます。ソースフォルダーで同じことを行うと、すべてのテストが実行されます。

Suite runnerを使用することで、無関心を表明しましたが、同様の効果を得ることができます 。ただし、これは DRY に違反しています。テスト名のコピーをスイート クラスで最新の状態に保つ必要があります。ただし、同じテストを複数のスイートに簡単に入れることができます。

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

もちろん、私はこれらのことを自動化しておくべきです。そのための良い方法は、Ant タスクを使用することです。

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
于 2008-09-30T15:41:12.993 に答える
1

いいえ、残念ながら TestNG グループに似た概念はありません。JUnit4 で予定されていましたが、不明な理由により、計画から外されました。

于 2008-09-30T15:19:57.207 に答える
0

私のアドバイスは、単にJUnitを捨てて、TestNGを使用することです。TestNGに慣れると、Junitは石器時代のように見えます。

于 2009-01-12T13:44:35.303 に答える
0

ANT または Maven を使用している場合は、テストを名前でフィルタリングすることで、実行するテストを制御できます。少し厄介ですが、うまくいくかもしれません。

于 2008-09-30T15:17:32.207 に答える
0

TestNG には私の投票があります。注釈ベースであり、グループ、単一のテストなどとして実行でき、Maven にリンクでき、すべての JUnit テストをテスト実行の一部として実行できます。

JUnitよりも強くお勧めします。

于 2008-09-30T19:32:33.233 に答える
0

スイートを作成できますが、これによりすべての構成がアノテーションではなくスイートに配置されます。

于 2008-09-30T15:01:17.940 に答える
0

JUnit 3 では、他のテストと同じように実行できるテスト スイートを作成できます。JUnit 4 にも同様の概念はありませんか?

于 2008-09-30T15:01:55.347 に答える