31

すべてのテストを Eclipse (Eclipse 3.4 'Ganymede') で実行すると、「Unrooted Tests」の下に 1 つのテストがリストされます。私は Junit 3.8 を使用しており、この特定のテストは TestCase を拡張します。このテストと他のテストの違いはわかりません。これが Eclipse 3.3 (Europa) で発生したことを覚えていません。

説明:

まだ JUnit 4.0 に移行していないため、アノテーションは使用していません。私もググったところ、ほとんどの人が JUnit 4 で問題を抱えているように見えましたが、解決策は見当たりませんでした。この時点で、テストはローカルと CruiseControl の両方でパスするので、あまり心配していませんが、興味があります。

ただし、これを最初に見たときは、他のテストで実行した場合にのみ失敗する失敗したテストでした。これにより、私が見つけられなかった「ルート化されていない」問題の解決策を探して、うさぎの穴に落ちました。最終的に、適切に取り壊されていない別のテストで犯人を見つけました。

同意します。Eclipse の問題のようです。

4

23 に答える 23

21

最後に、解決策を見つけました。問題は、注釈を使用してテスト ケースを定義するのではなく、「古い方法」で行っていることです。アノテーションを使用するように変換するとすぐに、一度に 1 つのテストを再度実行できるようになります。

以下は、アノテーションを使用した基本的なテストの例です。

import static org.junit.Assert.*; // Notice the use of "static" here
import org.junit.Before;
import org.junit.Test;

public class MyTests { // Notice we don't extent TestCases anymore

  @Before
  public void setUp() { // Note: It is not required to call this setUp()
    // ...
  }

  @Test
  public void doSomeTest() { // Note: method need not be called "testXXX"
    // ...
    assertTrue(1 == 1);
  }
}
于 2009-04-29T17:46:06.103 に答える
16

「ルート化されていないテスト」エラーメッセージも表示されていましたが、魔法のように消えました. MavenプロジェクトでEclipseを使用していたことが原因だと思います。Test クラスに新しいメソッドを追加して @Test アノテーションを付けると、[Run as Junit test] メニュー オプションを使用してそのメソッドを実行しようとすると、エラー メッセージが表示されるようになりました。ただし、Mavenビルドを実行すると、ルート化されていないテストメッセージが消え、将来的にはそれが問題の解決策になると思います.

JUnit が使用しているクラスを更新するため、maven ビルドを実行します。

于 2011-06-13T21:38:44.830 に答える
12

クラスがその階層のどこかで TestCase を拡張する場合、実行構成の下のドロップダウンにリストされている JUnit 3 テスト ランナーを使用する必要があります。JUnit 4 ランナー (私が信じているデフォルト) を使用すると、ルート化されていないテスト現象が発生します。

于 2008-11-12T04:40:37.800 に答える
3

テストプロジェクトがビルドされていることを確認することで、問題を解決しました。ビルド パスに問題があり、テスト クラスをコンパイルできませんでした。ビルド パスの問題を解決すると、テストがコンパイルされ、「新しい」メソッドを実行できるようになりました。したがって、「ルート化されていない」テストは、コンパイルされたバイナリに存在しないことも意味すると想定できます。

于 2011-08-22T14:07:31.800 に答える
2

私はこれを見たことがありませんが、Google を数分間ざっと調べた限りでは、これはテストの問題ではなく、Eclipse のバグである可能性があるようです。テストに @Test アノテーションがないと思いますか? テストを吹き飛ばして再作成できますか? その場合、同じエラーが発生しますか?

于 2008-09-23T13:42:15.157 に答える
1

これらは、ルート化されていないエラーが表示される 2 つのシナリオです。

  1. テスト前にアノテーション @Test を見逃した場合。

    @テスト

    public void foo(){ }

  2. Gwt プロジェクトで、同じオブジェクトの 2 つのモックが定義されている場合。クラスAが1つあり、

    @GwtMock プライベート A テスト;

    @GwtMock プライベート A a; 次に、ルート化されていないテスト エラーも表示されます。

于 2014-10-03T16:59:02.467 に答える
1

この問題を引き起こす別のシナリオは、パラメーターを必要とするメソッドをやみくもにコピー/貼り付けたことです。すなわち

import org.junit.Test;

public class MyTest {

    @Test
    public void someMethod(String param) {
          // stuff
    }

}

いくつかの簡単な解決策があります。

  1. 特定のテスト メソッドで変数を定義する

  2. テストクラスにインスタンス変数として追加します

  3. セットアップメソッドを作成し、それに注釈を付けます@Before

于 2012-06-27T06:27:27.990 に答える
1

私はその問題を抱えていて、テストメソッドの前に「 @Test 」を1つ入れて解決しました!

このような:

@Test public void testOne() { // ... assertTrue(1 == 1); }

于 2014-04-06T22:46:24.823 に答える
1

もう 1 つの試みとして、JUnit のバージョンを少なくとも 4.12 にアップグレードしてください。

@RunWith(Parameterized.class) を使用するクラスを拡張したクラスで、この問題がしばらく発生していました。

しばらくして、申し訳ありませんが、これを引き起こした原因が正確にはわかりません。「ルート化されていないテスト」メッセージは消えましたが、テストはまだ正しく実行されませんでした。@Parameters メソッドから引数を受け取るべきコンストラクターが呼び出されませんでした。実行は @BeforeClass から @AfterClass に直接ジャンプしました。

この問題の修正は、JUnit を使用していた 4.8.1 から最新 (4.12) にアップグレードすることでした。だから多分それは将来誰かを助けるかもしれません。

于 2015-09-17T15:52:28.827 に答える
1

私にとっては、プロジェクトにビルド パスの問題が発生したことが原因でした。Maven の依存関係の構成を更新する必要があります。

于 2013-09-02T03:19:58.367 に答える
0

ハムクレストを使用していますか?またはあなたのテストに役立つ別のライブラリ?使用していません

import static org.junit.Assert.*;

テストで使用するかどうかを確認します。

import static org.hamcrest.MatcherAssert.assertThat;

または他のアサーションはJUnitアサーションではありません。

于 2011-01-14T16:06:10.143 に答える
0

私のビルドパスにエラーがあったことが判明しました...いくつかのjarファイルがありませんでした。ビルドパスを再構成しましたが、機能しました。

于 2012-11-11T10:00:58.380 に答える
0

私にとっての問題は、@BeforeClassor@AfterClassメソッドで例外がスローされたことです。これにより、テストはルート化されていないものとして分類されます。

于 2013-01-14T12:13:03.870 に答える
0

テストメソッド名が「test」の場合、このエラーが発生しました

@Test 
public void test() {
 // ... assertTrue(1 == 1); 
}

メソッドの名前を変更しましたが、機能しました

于 2014-07-30T05:24:15.997 に答える
0

個々のテスト メソッドの実行構成で TestRunner バージョン 4.0 から 3 に移行することで問題を解決できました。

于 2009-07-14T07:12:47.050 に答える
0

テストを であると宣言しないことで、この問題に遭遇しましたstatic

于 2015-05-21T19:12:44.843 に答える
0

テストクラスでjunit1.4を使用してjunit.framework.TestCaseを拡張しないでください。これにより問題が解決するはずです

于 2009-10-09T19:51:49.113 に答える