2017-02-16 68 views
1

我正在使用以下調用來獲取流,以便我可以找到我的一些資源的文件名。如何讓我的JUnit測試訪問來自main的資源?

Thread.currentThread().getContextClassLoader().getResourceAsStream(...) 

當我正常運行我的代碼,這工作得很好,如果我重複我的資源投入到我的測試文件夾,它也能正常工作。

如何避免此重複並使我的測試(通過IDEA運行時)使用主要資源?

+0

我找到了一個maven特定的解決方法。檢查了這一點:http://stackoverflow.com/a/6541151/451518 –

+0

@defaultlocale謝謝。雖然我不確定我是否理解這個評論。我已經更新了這個問題,以清楚說明我只是想通過IntelliJ IDEA正常運行測試。 (雖然我想也想讓他們在Maven後期工作。) –

回答

3

您在src/test/resources中的所有內容都被maven-resources-plugin複製到target/test-classes。然後,您在src/main/resources中的所有內容都會進入target/classes。然後,maven-surefire-pluginconfigures類路徑按此順序:target/test-classes第一個和target/classes下一個。

感謝這一點,如果你的資源保持在src/main/resourcessrc/test/resources,它的「測試」版本將被加載到單元測試中。

如果它只存在於src/main/resources中,它將在單元測試中可用,無需任何其他操作。

如果它僅存在於src/test/resources中,則只有在單元測試期間纔有權訪問它。

+0

感謝Yegor的回覆。你所說的一切似乎都是真實的,但由於某種原因它仍然不起作用。我可能會錯過一些愚蠢的東西,所以我會繼續尋找。 –

+0

遇到此評論:http://stackoverflow.com/questions/3923129/get-a-list-of-resources-from-classpath-directory/3923685#comment67155595_3923685。看起來,如果測試文件夾中有類文件,那麼它不會列出我感興趣的非類文件。如果我將非類文件放在它們自己的文件夾中,那麼它會將其選中。有點奇怪。 –