2011-08-10 16 views
0

私はTestNG + Eclipseを使用して実行する小さなjavaプロジェクトを持っており、うまくいきます。 私は、ファイルと私は私のテストクラスの1つの静的ブロックでそれを初期化プロパティを使用してテストデータを外部化している - 私はAntのビルドを使用して、同じ実行するとき、私は、ターゲット「実行」に次の例外が発生した(1.8)プロパティファイルの静的初期化がantのビルドで失敗する

public class SanityTest extends SelTestCase { 

static Properties properties = new Properties(); 
static String pickUp; 
static String dropOff; 

static { 
    try { 
     properties 
       .load(SanityTest.class 
         .getResourceAsStream("/com/product/testdata/testdata.properties")); 
     pickUp = properties.getProperty("pickUp"); 
     dropOff = properties.getProperty("dropOff"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

/** 
* Verifies the booking of car on car hire market 
* @throws Exception 
*/ 
@Test 
public void testBookingModule() throws Exception { 
    // Some tests here 
    } 

しかし -

[testng] Caused by: java.lang.NullPointerException 
[testng] at java.util.Properties$LineReader.readLine(Properties.java:418) 
[testng] at java.util.Properties.load0(Properties.java:337) 
[testng] at java.util.Properties.load(Properties.java:325) 

「ビン」が作成され、すべてのファイルがあることを確認できませんでした。 私が逃したことはありますか?

+0

あなたの小道具ファイルの内容をどのようにフォーマットしましたか? – karla

答えて

1

クラスローダーによってリソースとしてロードされたファイルを取得するには、パッケージ/ディレクトリ名を使用する必要があることは奇妙に思えます。

通常、getResourceAsStreamを使用すると、クラスがどこにあるか、.classファイルがある場所(またはリソースディレクトリ内にeclipseがビルド時にそれをコピーする)にデータファイルを置きます。ファイルの名前

properties.load(SanityTest.class.getResourceAsStream("testdata.properties")); 

を試してみてくださいtestdata.propertiesがSanityTest.class

よろしく、 ステファン

+0

ああ、私は別のディレクトリに保管しているので、クラスから自分のデータを分離したいと思った。それ以外のクラスとテストデータはすべて1つのパッケージになります。他のアプローチを提案し、データファイルをクラスと同じパッケージに保管しますか? – Tarun

+0

あなたはeclipseを使うことができます。プロジェクトの典型的なMavenアーキタイプは、別のフォルダー内のテストリソース、別のフォルダー内の通常のリソース、あるフォルダー内の通常のアプリケーションクラス、別のフォルダー内のテストクラスを持つことができます。 http://hop2croft.wordpress.com/2011/04/28/directory-structure-in-a-project-with-maven/ – Snicolas

0

と同じフォルダにある場合、あなたは、プロパティファイルからのストリームを取得するように思えます。 この例外は、不正な形式のプロファイルから来て、nullがどこかに返されることがありますか?

+0

その場合、TestNGを使用してテストを実行しようとすると同じ例外が発生するはずです。しかし、私はしません。私はantを使うときだけ例外が発生します! – Tarun

+0

okは答えを得ました。プロパティファイルはJavaクラスではないので、私はコピータスクを作成して、ビルドフォルダ内で利用できるようにしなければなりませんでした。 \t \t \t \t <コピーtodirの= "$ {build.dir}/COM/carhiremarket/TESTDATA"> \t \t \t \t \t <ファイルセットDIR = "$ {testdata.dir}" /> \t \t \t \t – Tarun

+0

ああ、良い。その後、気を散らす答えを申し訳ありません。 – karla

関連する問題