テスト スイートで実行するいくつかの JUnit 4 テストに問題があります。
テストを個別に実行すると問題なく動作しますが、スイートで実行すると、ほとんどのテスト メソッド (テスト メソッドの 90%) がエラーで失敗します。私が気づいたのは、常に最初のテストは正常に機能しますが、残りは失敗するということです。もう 1 つの問題は、メソッドのいくつかのテストが正しい順序で実行されないことです (リフレクションが期待どおりに機能しないか、メソッドの取得が必ずしも作成された順序で行われるとは限らないため、機能します)。これは通常、同じ名前のメソッドを持つ複数のテストがある場合に発生します。いくつかのテストをデバッグしようとしましたが、ある行から次の行へといくつかの属性の値が になっているようですnull
。
何が問題なのか、または動作が「正常」であるかどうかを知っている人はいますか?
前もって感謝します。
PS: OK、テストは互いに依存していません。どれも依存しておらず、すべてが , , を@BeforeClass
持っているため、テスト間ですべてがクリアされます。テストはデータベースで動作しますが、データベースは各テストの前にクリアされるため、これは問題になりません。@Before
@After
@AfterClass
@BeforeClass
簡単な例:
テスト スイート:
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
importy testclasses...;
@RunWith(Suite.class)
@Suite.SuiteClasses({ Test1.class, Test2.class })
public class TestSuiteX {
@BeforeClass
public static void setupSuite() { System.out.println("Tests started"); }
@AfterClass
public static void setupSuite() { System.out.println("Tests started"); }
}
テスト: このテストは、Glassfish で実行されているサーバー アプリケーションの機能をテストしています。
ここで、テストは、データベースとログインをクリアする @BeforeClass メソッドと、ログオフのみを行う @AfterClass を持つ基本クラスを拡張します。このクラスを導入する前に同じことが起こったので、これは問題の原因ではありません。
このクラスには、他のテストでは使用されない public static 属性がいくつかあり、2 つの制御メソッドを実装しています。
残りのクラスは、この例では基本クラスを拡張し、継承された制御メソッドをオーバーライドしません。
テストクラスの例:
imports....
public class Test1 extends AbstractTestClass {
protected static Log log = LogFactory.getLog( Test1.class.getName() );
@Test
public void test1_A() throws CustomException1, CustomException2 {
System.out.println("text");
creates some entities with the server api.
deletes a couple of entities with the server api.
//tests if the extities exists in the database
Assert.assertNull( serverapi.isEntity(..) );
}
}
そして2番目:
public class Test1 extends AbstractTestClass {
protected static Log log = LogFactory.getLog( Test1.class.getName() );
private static String keyEntity;
private static EntityDO entity;
@Test
public void test1_B() throws CustomException1, CustomException2 {
System.out.println("text");
creates some entities with the server api, adds one entities key to the static attribute and one entity DO to the static attribute for the use in the next method.
deletes a couple of entities with the server api.
//tests if the extities exists in the database
Assert.assertNull( serverapi.isEntity(..) );
}
@Test
public void test2_B() throws CustomException1, CustomException2 {
System.out.println("text");
deletes the 2 entities, the one retrieved by the key and the one associated with the static DO attribute
//tests if the deelted entities exists in the database
Assert.assertNull( serverapi.isEntity(..) );
}
これは基本的な例です。実際のテストはもっと複雑ですが、単純化されたテストで試してみましたが、それでもうまくいきません。ありがとうございました。