1

以前は、次のような JUnit テストをメソッドとして記述していました。

public class TextualEntailerTest {
  @Test test1() {...}
  @Test test2() {...}
  @Test test3() {...}
}

ほとんどのテスト ケースは同様の構造を持っているため、「データ駆動型」にすることにし、テストの内容を XML ファイルに入れました。そこで、メソッド「testFromFile(file)」を作成し、テストを次のように変更しました。

public class TextualEntailerTest {
  @Test test1() { testFromFile("test1.xml"); }
  @Test test2() { testFromFile("test2.xml"); }
  @Test test3() { testFromFile("test3.xml"); }
}

テストを追加するたびに、追加する新しいテスト ファイルごとに 1 行追加するのにうんざりします。もちろん、すべてのファイルを 1 つのテストに入れることができます。

public class TextualEntailerTest {
  @Test testAll() { 
     foreach (String file: filesInFolder) 
       testFromFile(file); 
  }
}

ただし、各ファイルを個別のテストにすることをお勧めします。これにより、JUnit は成功したファイルと失敗したファイルの数に関する優れた統計を取得できるためです。

だから、私の質問は次のとおりです。特定のフォルダー内のすべてのファイルに対して、各テストが「testFromFile(file)」の形式である個別のテストを実行するように JUnit に指示する方法は?

4

3 に答える 3

2

Theoriesファイルの場所を使用@DataPointsできるため、テストでループする必要がなく、各ファイルの後でセットアップとクリーンアップが可能になります。しかし、それはまだそのように報告されます。

理論には、上記のテストのように、すぐに失敗する (最初の失敗後に終了する) という問題もあります。複数のバグがある状況を隠すことができるため、これは良い習慣ではありません。個別のテストを使用するか、ErrorCollector. 私は本当に組み込まれTheoriesていたらよかったのにと思います。ErrorCollector

于 2012-09-19T12:23:47.030 に答える
2

確かではありませんが、これらが役立つかもしれません。 リファレンス1 リファレンス2 . お役に立てれば。

于 2012-09-19T12:34:30.400 に答える
1
@RunWith(value = Parameterized.class)
public class JunitTest {

     private String filename;

     public JunitTest(String filename) {
        this.filename= filename;
     }

     @Parameters
     public static Collection<Object[]> data() {
       Object[][] data = new Object[][] { { "file1.xml" }, { "file2.xml" } };
       return Arrays.asList(data);
     }

     @Test
     public void Test() {
       System.out.println("Test name:" + filename);
     }


}
于 2012-09-19T12:59:01.587 に答える