【问题标题】:Load test resources within other module?在其他模块中加载测试资源?
【发布时间】:2012-06-18 12:09:09
【问题描述】:

我在另一个模块中使用抽象类来读取和输入我的测试数据:

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.

我在这里缺少什么?为什么抽象类可以在同一个模块中工作,而不能在另一个模块中工作?

【问题讨论】:

    标签: java maven junit


    【解决方案1】:

    测试资源仅用于此工件的测试,它们不会被部署。

    有两种可能的解决方法:

    • 脏:让你的应用程序deploy a test jar along with the main jar, 并将其作为具有范围 TEST 的依赖项添加到第二个工件。
    • Clean:为基础测试类创建单独的测试工件并 通用测试资源。重要提示:在这个工件中,src/test 中没有任何内容,所有内容都在 src/main 中。从其他两个参考这个测试工件 范围为 TEST 的工件。

    【讨论】:

    • 嗯,我以为这就是我所拥有的?我将 BaseClass 放在 src/main 中,而不是放在 src/test 中。然后我在新测试模块的 pom 中引用了它。
    • @membersound 嗯。你在做什么是丑陋的地狱,但通常应该工作。稍等:我希望您将文件引用为BaseClass.class.getResourceAsStream(filename)
    • 我设法让它工作了:InputStream stream = this.getClass().getClassLoader().getResourceAsStream("path/to/base/class/" + filename); 为什么这么丑?我需要一个提供测试资源的基类。然后我必须使用这个基类来导入测试文件,并针对不同工件模块中包含的不同 ITest 执行文件。如果我想将资源全局放在一个中心位置,而不是在每个模块中复制,那么拥有一个基本的抽象文件导入器基类是唯一可行的方法。或者你能提出更好的建议吗? tnx
    • 这很丑,因为这意味着您的测试类(或基类)与您的生产代码一起部署。
    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多