[英]Junit + getResourceAsStream Returning Null
不知道這怎么可能。 我重新閱讀了 getResourceAsStream,它總是返回 null。
InputStream source = this.getClass().getResourceAsStream("test.xml");
Finder 中 test.java 旁邊(使用 OS X 和 Eclipse)是 test.xml
我可以在 TextWrangler 中打開它並查看它是否存在內部數據。
如果它有任何區別,這是一個 Junit 測試。 我去查看了我們系統上現有的 Junit 測試,我以與工作示例完全相同的方式使用它(如文件所在的位置和代碼本身)。
有什么微小的差異會阻止我假設 getClass() 返回正確的路徑?
謝謝!
它沒有在類路徑上找到資源。 如果您使用的是 junit 和 maven,請確保通過在<testResource>
部分添加<include>
文件指令將資源復制到目標/測試類
您還可以使用以下命令找出您的類在文件系統中的位置
this.getClass().getResource(".")
並檢查資源是否存在
getResourceAsStream()
正在使用 CLASSPATH,因此它將從您的類所在的任何位置加載,而不是您的源文件。
我懷疑您需要將 XML 復制到與 .class 文件相同的目錄中。
如果您使用 Maven,請將這部分添加到您的pom.xml
<build>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
</build>
您的test.xml
和其他資源文件必須位於src/test/resources
我總是對這種方法有問題。 這里有 2 個鏈接,可能有用:
我總是嘗試在開頭添加“/”或“./”。
根據我的經驗,最好的方法是使用 FileInputStream。 只需要記住一件事(在 Eclipse 中使用 FileInputStream 時),在默認設置下,您的工作目錄設置為項目根目錄。 您始終可以使用這段代碼檢查當前目錄在哪里(以及您需要什么相對路徑)。
假設test.xml
位於您的test
根源文件夾下,請執行以下操作:-
InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
我在這個問題上花了很多時間,但缺少以下配置:右鍵單擊 eclipse 項目並選擇Properties -> Java Build Path -> Source並編輯Included行並添加 *.properties (*.fileExtension)
將 test.xml 放在 src/main/resources(或 src/test/resources)中。
File file = ResourceUtils.getFile("classpath:test.xml");
String test = new String(Files.readAllBytes(file.toPath()));
嘗試使用類加載器
InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
來自 Java API:
從用於加載類的搜索路徑中查找指定名稱的資源。 該方法通過系統類加載器定位資源
例如,語法將是: ClassLoader.getSystemResource("test.xml").toString();
奇跡般有效!
試試 MyClass.getResourceAsStream()。
還可以嘗試將 test.xml 放在您的類路徑中。 例如,在 Eclipse Web 項目中,將 text.xml 放在 webcontent/WEB-INF/classes
我在 Spring 課程中遇到了這個問題。 System.class.getResourceAsStream(...)
在單元測試中工作但不在 Tomcat 中, Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
在 Tomcat 中工作但不在單元測試中。
最終我去了:
ClassUtils.getDefaultClassLoader()
.getResourceAsStream("com/example/mail/templates/invoice-past-due.html"))
我還發現,一旦我這樣做了,我也沒必要都開始以斜線的路徑。
將您的資源文件所在的文件夾添加到 eclipse 的源文件夾中。 然后文件應該自動放到bin目錄下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.