我正在使用以下調用來獲取流,以便我可以找到我的一些資源的文件名。如何讓我的JUnit測試訪問來自main的資源?
Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
當我正常運行我的代碼,這工作得很好,如果我重複我的資源投入到我的測試文件夾,它也能正常工作。
如何避免此重複並使我的測試(通過IDEA運行時)使用主要資源?
我正在使用以下調用來獲取流,以便我可以找到我的一些資源的文件名。如何讓我的JUnit測試訪問來自main的資源?
Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
當我正常運行我的代碼,這工作得很好,如果我重複我的資源投入到我的測試文件夾,它也能正常工作。
如何避免此重複並使我的測試(通過IDEA運行時)使用主要資源?
您在src/test/resources
中的所有內容都被maven-resources-plugin複製到target/test-classes
。然後,您在src/main/resources
中的所有內容都會進入target/classes
。然後,maven-surefire-pluginconfigures類路徑按此順序:target/test-classes
第一個和target/classes
下一個。
感謝這一點,如果你的資源保持在src/main/resources
和src/test/resources
,它的「測試」版本將被加載到單元測試中。
如果它只存在於src/main/resources
中,它將在單元測試中可用,無需任何其他操作。
如果它僅存在於src/test/resources
中,則只有在單元測試期間纔有權訪問它。
感謝Yegor的回覆。你所說的一切似乎都是真實的,但由於某種原因它仍然不起作用。我可能會錯過一些愚蠢的東西,所以我會繼續尋找。 –
遇到此評論:http://stackoverflow.com/questions/3923129/get-a-list-of-resources-from-classpath-directory/3923685#comment67155595_3923685。看起來,如果測試文件夾中有類文件,那麼它不會列出我感興趣的非類文件。如果我將非類文件放在它們自己的文件夾中,那麼它會將其選中。有點奇怪。 –
我找到了一個maven特定的解決方法。檢查了這一點:http://stackoverflow.com/a/6541151/451518 –
@defaultlocale謝謝。雖然我不確定我是否理解這個評論。我已經更新了這個問題,以清楚說明我只是想通過IntelliJ IDEA正常運行測試。 (雖然我想也想讓他們在Maven後期工作。) –