getResourceAsStream(“abc.xml”)返回null

时间:2013-06-24 22:24:43

标签: java xml unit-testing

我正在编写一个像这样的单元测试用例,

 public class XMLUtilsTest {
  private static final String XML_FOR_TEST ="a/b/c/xml_utils_test.xml";


 @Before
 public void setup() {

 }

@Test
public void testGetElementValue() throws Exception {
  InputStream inputStream = readTestXML(XML_FOR_TEST);

  System.out.println("Input Stream: "+inputStream);
}

private InputStream readTestXML(String testXmlFile) {
//InputStream inputStream = XMLUtilsTest.class.getResourceAsStream(testXmlFile);
//InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(testXmlFile);
 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(testXmlFile);
 return inputStream;
 }
}

在调试时,我观察到readTestXML方法中的this.getClass()。getClassLoader()调用正确地加载了类,但是当在this.getClass()。getClassLoader()的输出上调用getResourceAsStream(testXmlFile)时,输出是空。

我的项目结构是这样的,

 --src
   --main
   --test
       --java
           --XMLUtilsTest.java
       --resources
           --a.b.c
               --xml_utils_test.xml

请建议。

谢谢,

Vijay Bhore

1 个答案:

答案 0 :(得分:2)

您的代码正常运行。您需要做的就是检查src / test / resources是否在类路径上,你应该没问题(项目属性 - > java构建路径

我刚刚重新创建了你的场景并且运行正常。

//Both snippets should work (don't forget to prepend a slash if using getClass().getResourceAsStream)
System.out.println(this.getClass().getClassLoader().getResourceAsStream("a/b/c/file.txt"));
System.out.println(this.getClass().getResourceAsStream("/a/b/c/file.txt"));