1

アプリ用にいくつかの JUnit クラスを作成しましたが、テスト データ (現在はハードコーディングされています) をコードから分離して、データのみのテキスト ファイル/プロパティ ファイル/xml などに分割したいと考えています。

そのため、JUnit を変更することなく、さまざまなテスト データを簡単に提供できます。

それらをテキストファイルに入れ、パーサーを使用してJUnitスイートの最初にそれを解析し、すべてのデータをJava静的クラス定数に変換して、JUnitのどこでも簡単に参照できるようにすることを考えていました.

public final class TestDataConstants {

public static final String username = "xbeta";
public static final String password = "test123!";
public static final String authToken = "f17bf9c8-9d38-47af-a053-210130cac6f7";
...
}

これでパーサーを簡単に書けることがわかりましたが、過去にこれをやった経験のある人に 2 つの質問をします。

  1. これらのテスト データの保存に最適で、使用すべきフォーマットは何ですか?
  2. これらのテスト データ ファイルを Java 静的クラスに変換するには、どのような方法がありますか? Java を使用してオンザフライで Java コードを生成するようなものです。

ありがとうございます。

4

2 に答える 2

1

1 つの方法は、.properties ファイルを使用し、テストの開始時にそれをリソースとしてロードすることです。

例えば、

test.properties:

test.username=xbeta
test.password=test123!
test.authToken=f17bf9c8-9d38-47af-a053-210130cac6f7

次に、テストで、test.properties ファイルがクラスパスにあると仮定して、次のような方法でデータにアクセスできます。

// note, the .properties is removed in the call to .getBundle
ResourceBundle testProperties = ResourceBundle.getBundle("test"); 
String username = testProperties.getString("test.username");
String password = testProperties.getString("test.password");
于 2012-05-31T23:15:32.883 に答える
0

@DataProviderデータをプロパティファイルに入れると仮定して、これを で行う方法は次のとおりです。

public class A {

  @Test(dataProvider = "dp")
  public void test(String k, String v) {
    System.out.println("Testing " + k + " " + v);
    Assert.assertEquals(k.toUpperCase(), v);
  }

  @DataProvider
  public Object[][] dp() throws FileNotFoundException, IOException {
    Properties p = new Properties();
    p.load(new FileInputStream(new File("/tmp/a.properties")));
    List<Object[]> result = Lists.newArrayList();
    for (Map.Entry<Object, Object> es : p.entrySet()) {
      result.add(new Object[] { es.getKey(), es.getValue() });
    }
    return result.toArray(new Object[result.size()][]);
  }

  @Test(dataProvider = "dp")
  public void test(String k, String v) {
    System.out.println("Testing " + k + " " + v);
    Assert.assertEquals(k.toUpperCase(), v);
  }
}

プロパティ ファイル:

abc: ABC
def: DEF
ghi: GHI

そして出力:

Testing abc ABC
Testing def DEF
Testing ghi GHI
PASSED: test("abc", "ABC")
PASSED: test("def", "DEF")
PASSED: test("ghi", "GHI")

===============================================
    Test1
    Tests run: 3, Failures: 0, Skips: 0
===============================================

パラメーターの各セットがテスト メソッドに渡され (テスト メソッドが 3 回呼び出される)、このテスト メソッドがこれらを通常のメソッド パラメーターとして宣言していることに注意してください。

データ プロバイダーの詳細: http://testng.org/doc/documentation-main.html#parameters-dataproviders

于 2012-06-01T05:24:24.130 に答える