我创建了一个E2E测试项目,最初,所有的Java类都在'src / test / java'中,但是现在我想将所有不包含测试的文件移到“ src / main / java”中文件夹,问题出在我做完之后:
我无法将软件包从“ src / test / java”导入“ src / main / java” (但可以做相反的事情)。就像完全不存在要导入的软件包一样。
清理了项目,并尝试通过IDE和maven运行,它不会更改结果。
我在做什么错?
答案 0 :(得分:2)
您在这里混淆了两个不同的概念,即源文件夹和软件包。
一个源文件夹就是那个包含源的文件夹。在大多数现代项目中,您会找到两个这样的源文件夹,一个用于生产代码,另一个用于测试代码。在您的示例中(标准Maven目录布局,分别是src / main / java和src / test / java)。
包是组织类的一种方式,通常也可以在源代码中得到反映。按照惯例,测试和生产代码使用相同的程序包,例如生产类com.mypackage.Foo通常将由名为com.mypackage.FooTest的类进行测试。按照约定,这些程序包层次结构还映射到源代码中的目录层次结构。注意:虽然在99.99999%的情况下,出于理智的考虑,您应该遵守此约定,但这实际上不是必需的。您可以独立于文件系统的安排来组织软件包(在源端)。
无论如何,在标准设置中,目录布局可能看起来像这样:
src/main/java/com/mycompany/mypackage/SomeClass.java
src/test/java/com/mycompany/mypackage/SomeClassTest.java
因此,生产和测试类共享一个程序包,但它们位于不同的源文件夹中。此设置非常强大,因为它允许您的构建工具仅将生产代码导出到最终输出,同时使您的测试代码可以在包级别访问正在测试的代码。测试和生产代码是独立编译的,生产代码不知道测试代码,这应该是这样。
根据您的情况,似乎您在测试文件夹中有生产代码。要改变这种状况,将代码移至其他程序包不是解决方案。相反,您要将代码移到相同的程序包中,但在生产文件夹中。如果使用的是IntelliJ,则“移动”对话框允许您选择其他源根(正是您想要的根),其他IDE将覆盖类似的功能。
答案 1 :(得分:1)
我遇到了同样的问题,但问题得到解决。 在我的情况下,pom依赖项具有范围作为测试,因此我删除了它,一切开始起作用。
答案 2 :(得分:0)
绝对可以做到。
首先,您需要导航到Build Path-->Configure Build Path--> Source tab
然后在“源”选项卡中搜索/选中 [您的项目名称] / src / main / java 并进行更改
“包含测试源” 从否更改为是并保存。
这将成功解决从“ src / test / java”到“ src / main / java”的导入包的问题
答案 3 :(得分:0)
我无法将软件包从“ src / test / java”导入“ src / main / java”
这基本上就是Maven的软件模型的工作方式。从Maven的角度来看,一个项目的代码库有两个部分,分别对应于“主”和“测试”子树。
“主”子树包含您打算在生产环境中部署和运行,或交付给客户等的软件。
“ test”子树包含其唯一目的是测试主树中内容的软件。
“测试”子树中的代码通常取决于“主”树,但“主”树中的代码不应 1 取决于“测试”树。 Maven不会将“测试”代码放在用于编译或运行“主”代码的类路径上,因为这很可能导致生产代码对测试代码的意外依赖。这将是一件坏事。
1-我想说不能,但是可能有些模糊的方法让Maven允许这种依赖。无论哪种方式,都是“错误”。
所以...
我创建了一个E2E测试项目,最初,所有的Java类都在'src / test / java“中,
这里有三种可能性:
如果此“测试”项目由单元测试组成,则它们不应位于单独的项目中。单元测试与它们所测试的代码属于同一项目。它应该全部在该项目的“测试”树中。
如果此“测试”项目包含对由其他程序包实现的大规模组件的系统/功能测试,则(可能)“测试”项目中的所有代码都属于该项目的“主”树。 “测试”树仅包含功能测试框架的单元测试 ...,并且仅在对您的项目有意义的情况下。
如果此“测试”项目包含帮助程序方法以及要在其他项目的单元测试或功能测试中重用的内容,则它们应位于“主”树中。要在另一个项目的“测试”树中使用它们,您将为另一个项目中的“测试”项目添加一个范围为“ test”的依赖项。
但总而言之,您不应该将测试帮助程序类从“测试”移到“主”。将它们保留在“测试”树中(如果这是单元测试)或按上述方法重组项目。
Junit(或任何其他方式)测试运行程序将仅尝试运行具有适当类名,方法注释或其他内容的测试。 “测试”树中的其他(取决于测试的)类都可以。