Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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和Gradle调试Elasticsearch插件集成测试_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Gradle_Intellij Idea_Integration Testing - Fatal编程技术网 elasticsearch,gradle,intellij-idea,integration-testing,Java,elasticsearch,Gradle,Intellij Idea,Integration Testing" /> elasticsearch,gradle,intellij-idea,integration-testing,Java,elasticsearch,Gradle,Intellij Idea,Integration Testing" />

Java 使用IntelliJ和Gradle调试Elasticsearch插件集成测试

Java 使用IntelliJ和Gradle调试Elasticsearch插件集成测试,java,elasticsearch,gradle,intellij-idea,integration-testing,Java,elasticsearch,Gradle,Intellij Idea,Integration Testing,我正在构建一个基于的Elasticsearch插件。该插件使用Gradle进行构建、测试、集成测试等。我想使用IntelliJ在Elasticsearch集成测试中设置断点并对其进行调试。我不在乎是从IntelliJ内部还是从IntelliJ外部运行Gradle构建,但现在在这两种情况下,我都遇到了问题。我将在下面描述我的设置和问题: 首先,我通过CLI下载并构建/测试示例项目: $ pip install cookiecutter $ cookiecutter gh:spinscale/coo

我正在构建一个基于的Elasticsearch插件。该插件使用Gradle进行构建、测试、集成测试等。我想使用IntelliJ在Elasticsearch集成测试中设置断点并对其进行调试。我不在乎是从IntelliJ内部还是从IntelliJ外部运行Gradle构建,但现在在这两种情况下,我都遇到了问题。我将在下面描述我的设置和问题:

首先,我通过CLI下载并构建/测试示例项目:

$ pip install cookiecutter
$ cookiecutter gh:spinscale/cookiecutter-elasticsearch-ingest-processor
$ # keep all default settings when prompted...
$ gradle build # (also runs the test and integTest tasks)
运行良好,测试通过。我使用Gradle(
$gradleidea
)生成IntelliJ项目,并在IntelliJ中打开它(在目录上显示一个绿色的Gradle图标)。我使用默认的gradle包装器选项,并在打开时保留所有其他默认值

第一个问题:我打开IntelliJ的Gradle窗口(视图>工具窗口>Gradle),但我没有看到我知道的项目中定义的任何Gradle任务。这似乎不是什么大不了的事,但拥有它们会很好


现在我想在IntelliJ中运行测试,所以我在
org.elasticsearch.plugin.inset.awesome.AwesomeProcessorTests
中打开测试。该类从Elasticsearch扩展了
ESTestCase
类,但不直接测试任何ElasticSearchAPI交互

第二个问题:我使用类名旁边的绿色小三角形运行这个测试类。此操作失败,错误为
java.lang.RuntimeException:无法安装测试安全管理器

我发现我可以通过编辑运行配置并添加VM参数
-Dtests.security.manager=false
来解决这个问题。现在,简单的测试运行并通过,我还可以设置断点并调试它们


现在我想直接测试一些Elasticsearch功能,所以我编写了一个新的集成测试类,它扩展了类
ESIntegTestCase
。测试应点击Elasticsearch
\u cat/plugins
端点,并检查响应字符串是否为非空

public class SimpleIT extends ESIntegTestCase {
    private RestClient restClient;
    @Before
    public void setUp() throws Exception {
        super.setUp();
        this.restClient = getRestClient();
    }
    @Override
    protected Collection<Class<? extends Plugin>> nodePlugins() {
        return Collections.singletonList(IngestAwesomePlugin.class);
    }
    public void testPluginInstallation() throws IOException {
        Response response = restClient.performRequest("GET", "_cat/plugins");
        String body = EntityUtils.toString(response.getEntity());
        assertTrue(body.length() > 0);
    }
}
这映射到我调用的行
getRestClient()
,这意味着IntelliJ正在阻止Gradle/Elasticsearch集成测试设置,否则该设置将从CLI工作

FWIW,我仍然可以在这一行上设置断点,并在IntelliJ中调试测试类,它将在这一行停止


现在,我尝试通过CLI运行集成测试,在IntelliJ中设置断点,并使用IntelliJ的远程调试器连接到测试

我设置了一个新的“远程”运行配置,保留默认值(传输套接字、调试器模式连接、主机
localhost
、端口5005)。在“使用模块的类路径搜索源”选项中,我尝试了所有可能的设置

我在
getRestClient()
行上设置了一个断点,并通过CLI使用远程调试选项运行Gradle:

$ GRADLE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005" gradle integTest
第四个问题:正如预期的那样,Gradle进程暂停,显示
正在侦听地址为5005的传输dt\U套接字。我在IntelliJ中启动新的远程任务,然后Gradle进程继续运行。不幸的是,它一直运行,并没有在断点处停止。测试仍然通过



我在网上广泛搜索了各种附加到Gradle调试器的方法。我已经看到了很多关于禁用守护进程的事情,我也尝试过使用
--system prop
来传递调试参数,但到目前为止没有解决这个问题。

我打开IntelliJ的Gradle窗口(视图>工具窗口>Gradle),但是我没有看到我知道的任何Gradle任务是在项目中定义的
您应该作为Gradle项目进入IDE。我在发布问题后尝试了这个。我现在可以看到这些任务,但是当我运行其中任何一个任务时,我从Gradle那里得到一个错误,基本上说JAVA_HOME环境变量必须设置为编译Elasticsearch。我现在不在电脑旁,所以无法提供确切的错误。我已经确保选择了JDK项目,并且直接使用IntelliJ可以很好地运行简单的测试。
$ GRADLE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005" gradle integTest