【问题标题】:Shared test resources across modules跨模块共享测试资源
【发布时间】:2020-09-29 18:05:36
【问题描述】:

在我的项目中,我目前具有以下结构:

Project:
 |->module1
 |->module2
 |->module3
 \->src

项目代码(即src 文件夹中的代码)取决于所有 3 个模块。 module2module3 都依赖于 module1module1 基本上是在需要时使用的一组健全性检查代码),module3 依赖于 module2

module2module3 的测试以及项目src 中的测试都需要一些测试资源文件。

我的module2 基本上是一个实用程序,它解析输入json 文件并将它们转换为UDF 类,module3 获取这些对象并处理它们。

我还没有在网上找到像我这样的结构的解决方案。

附:我也愿意接受有关我的整体项目结构的建议,如果这样可以简化事情的话。

【问题讨论】:

  • 如果你真的需要一个跨越模块边界的资源,这通常表明你没有编写单元测试更多的集成测试如果是这样,那么建议制作一个包含这些资源的单独模块是正确的方法去....除此之外,我不确定您为什么在根级别上创建了一个src 目录,而我还缺少一个pom.xml...
  • I haven't found a solution online for a structure like mine. 这应该可以很好地表明您遇到了问题。您的结构就是我们喜欢用 Modules(tm) 调用的第一个项目。我们都去过那儿。如果这是一条职业道路,或者您对编码很认真,那么您将想要全力以赴并进行单元测试。每个模块中的所有内容都需要独立存在,没有交叉。你可以做到,这很困难,但每个项目的分离都会变得更容易。撕掉它,做对了。
  • 感谢您的两位 cmets。 @khmarbaise,我认为您是对的,我的单元测试使用 json 解析器来解析示例 json,因此我可以在我尝试测试的模块中使用它的输出,这使它更像是一个集成测试。我宁愿模拟这些类并消除我的跨模块测试依赖性。另外,我有一个 pom.xml 我只是没有在问题中显示它。
  • @jnovack,你说得对,不应该有依赖,我想我可能会懒惰地嘲笑那些对象,而是去做我所做的不合适的事情,我不应该嘲笑那些对象使用另一个模块构建它们,它是测试文件。

标签: java maven testing module dependencies


【解决方案1】:

引入一个名为 test-resources 之类的新模块,它将资源打包到一个普通的 JAR 中。

让所有“真实”模块都依赖它,确保使用test 作用域

<dependency>
    <groupId>com.company</groupId>
    <artifactId>foobar-test-resources</artifactId>
    <version>${project.version}</version>
    <scope>test</scope>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2022-01-23
    • 2011-07-05
    • 2011-07-31
    相关资源
    最近更新 更多