【问题标题】:How are application classes/methods made available to java testsjava 测试如何使用应用程序类/方法
【发布时间】:2021-05-18 19:11:43
【问题描述】:

在我最近的角色中,我从 C 过渡到 Java。我们的项目具有 Apache Maven 制定的标准 java 项目结构。我可以毫无问题地从 Intellij 运行 Junit 测试。

但我很好奇跨 /src/main/ 分布的应用程序逻辑如何提供给 /src/test 中的测试逻辑。

单元测试框架是否对此负责?还是构建工具会创建一个临时 jar,其中包含测试类以及由它们各自的包结构管理的应用程序类?

感谢您的回复!

【问题讨论】:

  • 谷歌“类路径”。 tl;dr 是类路径是 JVM 将查找要加载的类的位置列表。 Maven 会将生产代码 (src/main/java) 编译到一个位置,并将测试代码 (src/test/java) 编译到另一个位置,当您运行测试时,maven 测试插件会将这两个目标放到类路径中,从而生成生产代码和测试代码无障碍。还有更多细节和细微差别,但这是基本思想。

标签: java maven junit


【解决方案1】:

但我很好奇跨 /src/main/ 分布的应用程序逻辑如何提供给 /src/test 中的测试逻辑。

单元测试框架是否对此负责?

没有。

或构建工具创建一个包含测试类的临时 jar 以及由它们各自的包管理的应用程序类 结构?

您可以配置一个构建来创建一个临时 jar 文件,其中包括测试类和应用程序类,但这不是正常的事情。通常,构建工具(在您的情况下为 Maven)会将所有代码编译为 .class 文件,并在运行测试时将所有这些 .class 文件放在 CLASSPATH 上。运行测试时,可以在测试中访问 CLASSPATH 上可用的所有类。

【讨论】:

  • 谢谢。我遇到资源说,要从测试中访问包私有类,也在测试中创建类似的包结构。所以我认为 maven 将应用程序和测试文件保存在一个包下(假设它们都具有相似的包结构)。是这样吗?
  • 没有。代码的作者决定了包,而不是构建工具。在所有源文件的顶部,您应该有一个package 语句,例如package com.objectcomputing.training;。通常,该源文件应定义在源根目录下与包结构匹配的目录中,例如src/main/java/com/objectcomputing/training/SomeClass.java
猜你喜欢
  • 2021-06-16
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多