Intellij idea IntelliJ如何决定您是否';你在做测试吗?

Intellij idea IntelliJ如何决定您是否';你在做测试吗?,intellij-idea,Intellij Idea,IntelliJ将项目的资源文件分为“资源文件夹”和“测试资源文件夹”。我的理解是,如果您运行单元测试,那么它将使用“测试资源文件夹”下列出的资源,否则将使用“资源文件夹”。问题是,当运行相同的代码时,它似乎会随意决定每隔一段时间从一个代码切换到另一个代码。我发现的唯一解决方法是将每个目录从“资源文件夹”移动到“测试资源文件夹”,或者在发生这种情况时将每个目录从“资源文件夹”移动到“测试资源文件夹”,反之亦然,但项目很大,资源很多,因此IntelliJ最终需要10-20分钟的“复制资源…”步骤

IntelliJ将项目的资源文件分为“资源文件夹”和“测试资源文件夹”。我的理解是,如果您运行单元测试,那么它将使用“测试资源文件夹”下列出的资源,否则将使用“资源文件夹”。问题是,当运行相同的代码时,它似乎会随意决定每隔一段时间从一个代码切换到另一个代码。我发现的唯一解决方法是将每个目录从“资源文件夹”移动到“测试资源文件夹”,或者在发生这种情况时将每个目录从“资源文件夹”移动到“测试资源文件夹”,反之亦然,但项目很大,资源很多,因此IntelliJ最终需要10-20分钟的“复制资源…”步骤


为什么会发生这种情况以及如何避免此问题?

测试资源根是仅从测试中引用的资源,而资源根是可以从生产代码和测试代码中引用的资源。编译过程将每个模块的资源和测试资源复制到单独的输出文件夹中

当您运行测试运行配置(JUnit或TestNG)时,类路径将包括生产文件夹和测试输出文件夹;哪一个优先取决于测试运行程序的详细信息。运行任何其他运行配置类型时,类路径将仅包括生产输出文件夹


IntelliJ中没有使用一种资源根类型而不是另一种资源根类型的逻辑。要么它们都在类路径上,要么只有一个在类路径上。

如果您正在运行传统的Maven项目,IntelliJ将自动将
src/test/*
下的所有资源声明为面向测试的。当你说“任意决定切换”时,闻起来好像你没有遵守惯例;再说一遍,我不确定您是在使用Maven、Ant还是Gradle——您还没有指定。你能提供更多的上下文吗?你要用什么指标来证明IntelliJ是在武断地做出这个选择?我有一个Gradle项目。讨论中的资源文件位于src/main/resources下。我说这似乎是武断的,因为我不知道是什么导致它切换,这就是我通过问这个问题试图弄清楚的。你在你的主代码中使用了某种IoC容器(Spring,Guice)吗?如果是,是否通过此资源文件夹注入依赖项?据我所知,没有使用IoC容器。我在哪里可以检查这些内容(运行配置、类路径等)以了解每次运行之间的更改?IntelliJ启动应用程序(包括类路径)所使用的确切命令行打印到运行配置控制台。刚才又发生了。我运行了一个不同的命令,它在工作时和不工作时使用。唯一的区别是调试端口。还有其他想法吗?