0

junit テスト クラスのセットを作成しています。これらはすべて同じ入力データ ファイルから読み取られます。以下のようにテスト スイートを作成しましたが、各テスト クラスのファイル名を複製することがわかりました。

では、コードを繰り返さずにこれを行うにはどうすればよいでしょうか..

@RunWith(Suite.class)
@SuiteClasses({SomeTests.class,someOtherTests.class})
public class AllTests{

}
-------------------
public class SomeTests{
    private String[] allfiles;

    public SomeTests() {
        allfiles = new String[] {"data1.txt","data2.txt"};
    }

    @Test
    public void testXX1(){
      //
    }

    @Test
    public void testXX2(){
      //
    }

}

public class someOtherTests{
    private String[] allfiles;

    public someOtherTests() {
        allfiles = new String[] {"data1.txt","data2.txt"};
    }

    @Test
    public void testYY(){
      //
    }

}

ファイル名を文字列配列として提供するには、別のクラスを作成する必要があると思いました..テストクラスが静的メソッドallfilesを呼び出して変数を初期化できるようgetFileNames()に、これを BeforeClass 注釈と組み合わせます

public class FileNames {
    public static String[] getFileNames() {
        return new String[]{"data1.txt","data2.txt"};
    }
}

public class SomeTests{
    private String[] allfiles;

    public SomeTests() {

    }

    @BeforeClass
    public void setUp(){
       allfiles = FileNames.getFileNames();
    }

    @Test
    public void testXX1(){
      //
    }

    @Test
    public void testXX2(){
      //
    }

}

しかし、それが正しい方法かどうかはわかりません。これには、setUp() を static として宣言する必要があります。つまり、インスタンス変数 allfiles static を作成する必要があります。

これはjunitテストの一般的なシナリオだと思います..だから、誰かがこれを適切に行う方法を教えてもらえますか?

4

1 に答える 1

0

@Beforeの代わりに使用すると@BeforeClasssetUp()メソッドは静的である必要はありません。

ただし、テストでファイル名配列を変更しない限り、テストの基本クラスを作成し、それらの名前で保護された定数を宣言することもできます。

public class FileBasedTests {
  protected static final String[] FILENAMES = {"data1.txt","data2.txt"}
}

public class SomeTests extends FileBasedTests {
  ...
}

各テストがそれらのファイル名の独自のコピーを持つことを本当に心配している場合は、allFiles = FILENAMES.clone().

于 2013-08-30T20:26:24.440 に答える