1

最近Java 7にアップグレードしましたが、その後、スイートは最初に @After アノテーションを使用してメソッドを実行し、次に @Test アノテーションを使用してメソッドを実行するという奇妙な問題に直面しています。どんな助けでも大歓迎です。前もって感謝します

編集:これはコメントからのコードです:

public class TestClasse extends TestCase {
  @Test public void testLogin(){ System.out.println("TestCase1");    }
  @Test public void testLogout(){ System.out.println("TestCase2");   }
  @After public void testGenerateReport(){ System.out.println("testCase3") }
}
4

1 に答える 1

5

これはあなたのコードです:

public class TestClasse extends TestCase {
@Test public void testLogin(){ System.out.println("TestCase1");  }
@Test public void testLogout(){ System.out.println("TestCase2");     }
@After public void testGenerateReport(){ System.out.println("testCase3") }
}

JUnit 3 を使用しているため (TestCase を拡張しているため)、JUnit は「test」で始まるすべてのメソッドを実行しています。

解決策: TestCase を拡張せず、クラスパスに JUnit 4 (4.11 が最新) が含まれていることを確認してください。また、混乱を避けるために、@After メソッドに testXXX という名前を付けないでください。

Java 7 にアップグレードしたときに動作しなくなったのはなぜですか?

Java 6 以前でメソッドを検索する場合、ほとんどの場合、JVM はソース ファイルで宣言されている順序でメソッドを返します (この場合、testLogin、testLogout、testGenerateReport)。これは Java 7 で変更されたため、メソッドは別の予測不可能な順序で返されます ( Has JUnit4 started support orders of test? Is it意図的な?への私の回答を参照してください)。そのため、Java 7 にアップグレードすると、メソッドが検出されて実行される順序が変更され、メソッドが@After最初に実行されました。

この問題の背景については、「予測可能性のためにテスト メソッドを並べ替える」を参照してください。SortMethodsWith を使用すると、ユーザーはテスト クラス内のメソッドの実行順序を選択できます

于 2013-08-16T07:24:10.480 に答える