2012-06-18 33 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

相关问题