测试框架应该位于 Maven 构建的哪个位置 - src/test/java 或 src/main/java?

Where on a Maven build should a test framework reside - src/test/java or src/main/java?

我从本网站之前的回答了解到,对于 Maven 构建:

  1. src/main/java 将部署到生产环境,而 src/test/java 不会。
  2. src/main/java 包含主应用程序,而 src/test/java 将包含用于 test 主应用程序的代码

现在我的问题是,在编写测试框架时,哪种方法是better/worse:

  1. 测试框架本身将是主要应用程序 - 因此它将位于 src/main/java?
  2. 测试框架将仅用于测试主应用程序 - 因此将位于 src/main/java?

不知何故卡在了正确的可视化上 -

对此的任何建议都会有所帮助。

一个有趣的问题。

就我个人而言,如果情况没有明确禁止我这样做,我会始终将测试框架与生产代码一起发布。为什么?

  1. 使用测试框架,您还可以包含“模拟”或“伪造”类,这将有助于简化和最小化单元测试,因为复杂结构的模拟往往会使单元测试膨胀乍一看,它的要点并不明显。

  2. 生产代码的用户如果作为 JAR 发送并作为依赖项加载,也可以使用带有 Mock 类 的测试框架进行测试。

  3. 测试框架是主应用程序之外的另一种实现,目的是提高应用程序和使用它作为依赖项的组件的可测试性。

总结:除非另有说明,否则默认情况下,我会将其与生产应用程序一起发布(如果您使用 Maven,则可以将其放在单独的模块中)即 src/main/java

这里是package/directorymaven项目最佳实践树,希望对你有所帮助:

src  --- main  ----
    |             |
    |--- test     |--- config
    |             |
    \--- site     |--- java
                  |
                  |--- scripts
                  |
                  |--- resources

因此,如果该应用程序是一个测试框架(据我了解),我认为您应该将其放在 src/main/java 中,其中所有主要 java代码是。

如果你写一个测试框架my-test-framework,你把代码放到src/main/java。当您在某些 JAR my-jar 中使用测试框架时,您将其声明为 test 作用域依赖项。然后代码将不会投入生产。

我认为你误入歧途

  1. src/main/java will be deployed to production whereas src/test/java will not be.

我会改写为

  1. src/main/java contains the code that consumers of the module will use (it is the purpose of your module)
  • 如果您的模块是关于最终用户使用的东西,它将投入生产。
  • 如果您的模块是测试框架,那么它不会投入生产(在部署到服务器或客户端机器上的意义上),但其他模块会使用它,因此测试框架应该在 src/main/java

(假设您将测试框架构建为单独的模块)

如果你需要现实生活中的例子,你不需要再看 JUnit(传说中的测试框架)

  • src/main/java 包含 JUnit 测试框架
  • src/test/java 包含测试测试框架的代码

更喜欢与 TestNG 一起工作? TestNG 的代码位于子模块“核心”中,但即便如此:

  • 核心/src/main/java包含TestNG测试框架
  • core/src/test/java 包含测试测试框架的代码