0

我从这个网站上以前的答案了解到,对于 Maven 构建:

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

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

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

不知何故陷入了正确地可视化这一点 -

  • 方法 1似乎是正确的,因为测试框架将是构建的主要目的,因此这将是主要应用程序。

    但是不知何故,我无法想象将测试框架部署到生产环境中。

  • 方法 2似乎是正确的,但是如果主要目的是编写一个测试框架,那么里面会发生什么src/main/java?对于我的测试框架应用程序,它会是空的还是不存在的?

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

4

4 回答 4

1

我认为你会误入歧途

  1. src/main/java 将部署到生产环境,而 src/test/java 不会。

我会把它改写为

  1. src/main/java 包含模块消费者将使用的代码(这是您模块的目的)
  • 如果您的模块是关于最终用户使用的东西,它将投入生产。
  • 如果您的模块是一个测试框架,那么它不会投入生产(在部署到服务器或客户端机器的意义上),但其他模块会使用它,所以测试框架应该在src/main/java

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

如果您需要现实生活中的示例,则无需再看JUnit(传说中的测试框架)

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

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

  • core/src/main/java 包含 TestNG 测试框架
  • core/src/test/java 包含测试测试框架的代码
于 2021-05-24T10:43:43.607 回答
0

以下是 maven 项目的包/目录最佳实践树,希望对您有所帮助:

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

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

于 2021-05-24T08:54:15.630 回答
0

一个有趣的问题。

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

  1. 使用测试框架,您还可以包含“模拟”或“假”类,这将有助于简化和最小化单元测试,因为对复杂结构的模拟往往会使单元测试变得臃肿,而且乍一看通常看不到它的要点。

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

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

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

于 2021-05-24T08:50:36.277 回答
0

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

于 2021-05-24T09:00:07.667 回答