2012-06-18 31 views
4

我使用的是抽象類在另一個模塊中進行讀取和輸入我的TESTDATA有:在其他模塊中加載測試資源?

package src/main/java/path/to/my/base/testclass; 
InputStream stream = getClass().getResourceAsStream(filename); 

filename是如"test.txt",位於src/main/resources/path/to/my/base/testclass

只要我把這個抽象類成與我的測試類相同的模塊,一切正常。 然後我提取acstract類(以及資源​​)到其它模塊,編譯,添加到POM等 結果:我的測試實施運行正常,但:我得到IO異常爲file could not be found.

什麼我在這裏想念嗎?爲什麼抽象類在同一個模塊內工作,但不在另一個內?

回答

2

測試資源僅用於此工件的測試,它們不會部署。

周圍有此兩種可能的途徑:

  • 髒:讓您的應用deploy a test jar along with the main jar, 並添加與範圍測試的第二產物的依賴。
  • 清理:爲基本測試類和常見測試資源創建單獨的測試工件。重要說明:在這個工件中,src/test中沒有任何內容,所有內容都在src/main中。從範圍爲TEST的其他 工件中引用此測試工件。
+0

嗯我以爲這是我的?我將BaseClass放在src/main中,而不是放在src/test中。然後我在新的測試模塊的pom中引用它。 – membersound

+0

@membersound嗯。你在做什麼是醜陋的,但通常應該工作。等等:我希望你將文件引用爲'BaseClass.class.getResourceAsStream(filename)'! –

+0

我管理得到它:'InputStream stream = this.getClass()。getClassLoader()。getResourceAsStream(「path/to/base/class /」+ filename);'爲什麼這是醜陋的?我需要一個提供測試資源的基類。然後我必須使用這個基類來導入測試文件,並針對包含在不同工件模塊中的不同ITests執行這些文件。擁有一個基本的抽象文件導入器基類是唯一能夠工作的東西,如果我希望在中心位置擁有全局資源,而不是複製到每個模塊中。或者你可以更好地建議? tnx – membersound

相關問題