2011-08-10 61 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