2011-08-10 62 views
0

我有一個小型的java項目,我使用TestNG + Eclipse執行,並且運行良好。 使用屬性我已經外化的測試數據文件,我在我的測試類的一個靜態塊初始化 -屬性文件的靜態初始化失敗,並生成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 
    } 

但是,當我使用Ant構建(1.8)我碰到下面的目標異常「運行」執行相同的 -

[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) 

我找不出多少,並檢查「bin」是否已創建並具有所有相應的文件。 有沒有我錯過的東西?

+0

你是如何格式化你的prop文件的內容的? – karla

回答

1

對於我來說,看起來很奇怪你必須使用包/目錄名來檢索由類加載器作爲資源加載的文件。

通常,當您使用getResourceAsStream時,將數據文件放在您的類所在的位置,.class文件所在的位置(或者在資源目錄中,eclipse將在構建時複製它),並且只通過指定文件的名稱。

嘗試

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

其中testdata.properties是在同一文件夾中SanityTest.class

問候, 斯特凡

+0

哦,我想分開我的數據從類,這就是爲什麼我把它保存在不同的目錄。否則我的課程和測試數據都將在一個包中。你有沒有建議其他方法,然後將數據文件保存在同一個包中作爲類? – Tarun

+0

你可以使用eclipse。項目的典型maven原型可讓您在單獨的forlder中具有測試資源,在單獨的文件夾中具有正常資源,在一個文件夾中具有正常應用程序類,在另一個文件夾中具有測試類。 http://hop2croft.wordpress.com/2011/04/28/directory-structure-in-a-project-with-maven/ – Snicolas

0

好像你從特性文件流。 這個異常是否來自格式不正確的prop文件,這會導致null返回某處?

+0

那麼在那種情況下,我會遇到同樣的異常,當我嘗試使用TestNG執行測試時,但我不知道。我只在使用螞蟻時遇到異常! – Tarun

+0

好的得到了答案,因爲屬性文件arr不是java類我必須做一個複製任務,以便它們將在build文件夾中可用 - \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