Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在intellij idea中使用多个测试目录自动创建测试_Java_Testing_Gradle_Intellij Idea - Fatal编程技术网

Java 在intellij idea中使用多个测试目录自动创建测试

Java 在intellij idea中使用多个测试目录自动创建测试,java,testing,gradle,intellij-idea,Java,Testing,Gradle,Intellij Idea,在我的项目中,我决定将单元测试和集成测试拆分为单独的包,我的项目结构基本上如下所示: ├── main │   ├── java │   │   └── ... │   └── resources │   └── ... ├── test │   └── java │   └── ... └── test-integration    ├── java    │   └── ...    └── resources    └── ... 这是一个很好的选择,可以

在我的项目中,我决定将单元测试和集成测试拆分为单独的包,我的项目结构基本上如下所示:

├── main
│   ├── java
│   │   └── ...
│   └── resources
│       └── ...
├── test
│   └── java
│       └── ...
└── test-integration
    ├── java
    │   └── ...
    └── resources
        └── ...
这是一个很好的选择,可以轻松地分离两种测试,intellij重构可以很好地与此解决方案配合使用。一切都设置正确,两个
test
目录都标记为
testsources root
使用gradle的
idea
插件,gradle识别两个源集,我创建了两个独立的任务来运行每个测试套件等。我唯一的问题是intellij自动创建测试向导没有区分这两个目录,我唯一可以修改的是
目标包
类路径,这两个测试目录显然是相同的,而且我没有选择哪一个的选项

有没有办法配置IDEA,让我可以在生成测试的目录之间进行选择?或者某种gradle插件可以根据后缀移动测试文件(例如,
*test
类转到
test
目录,
*IT
类转到
测试集成
目录)?或者可能根本就没有这样的选择:D


没有这样做的选项。这是对话的答案。最终决定目录的是:

protectedstatic List computeestroots(@NotNull Module main Module){
如果(!computeSuitableTestRootUrls(mainModule).isEmpty()){
//在同一模块中创建测试,如果测试源文件夹尚不存在,则将创建它
返回suitableTestSourceFolders(主模块)
.map(SourceFolder::getFile)
.filter(对象::非空)
.collect(Collectors.toList());
}

IntelliJ具有很强的可扩展性。您可以相对轻松地编写自己的插件,通过将与操作相关联的对话框替换为自己的对话框来改变这种行为。您自己的对话框可能主要是已经存在的内容的复制粘贴,但下一步将使用不同的
selectTargetDirectory

实现之后,“创建测试”对话框应为“选择目标目录”

v2020.1.1()中的行为

protected static List<VirtualFile> computeTestRoots(@NotNull Module mainModule) {
    if (!computeSuitableTestRootUrls(mainModule).isEmpty()) {
      //create test in the same module, if the test source folder doesn't exist yet it will be created
      return suitableTestSourceFolders(mainModule)
          .map(SourceFolder::getFile)
          .filter(Objects::nonNull)
          .collect(Collectors.toList());
}