在vscode中调试Gradle + Cucumber时不会触发断点

时间:2019-04-27 04:46:50

标签: gradle cucumber-java vscode-debugger

我试图在vscode中调试黄瓜步骤定义,但是没有运气。

已使用官方手册Cucumber Java Tools对项目进行了相应配置。它可以正常编译,并使用以下命令显示黄瓜输出:

gradle cucumber

为了附加到守护程序,在gradle.properties中添加了以下代码行:

org.gradle.daemon=true
org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

vscode似乎连接良好,因为我可以看到在vscode中向上和向下弹出调用堆栈。甚至有可能打破“捕获的异常”。但是根本不会触发“自定义”断点。

launch.json中使用以下调试配置:

"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": 5005

这里是gradle.build

plugins {
    id 'java'
}

repositories {
    flatDir {
        dirs 'libs'
    }
    jcenter()
    mavenCentral()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.google.guava:guava:27.1-jre'
    compile group: 'org.testng', name: 'testng', version: '6.14.3'

    testImplementation 'io.cucumber:cucumber-java:4.2.6'
}

configurations {
  cucumberRuntime {
    extendsFrom testImplementation
  }
}

task cucumber() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "cucumber.api.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/resources']
        }
    }
}

sourceCompatibility = '11'
targetCompatibility = '11'
version = '1.2.1'

注意:

  1. 我尝试使用eclipse附加到正在运行的gradle守护程序,但似乎也不起作用。

1 个答案:

答案 0 :(得分:1)

奇怪的是,使用默认黄瓜的Java运行程序不允许Visual Studio Code和Eclipse远程调试器在步骤定义上设置断点。

但是可以通过使用黄瓜的junit4运行程序来解决此问题。这是更新的gradle配置(注意,您不再需要“ cucumber”任务):

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.google.guava:guava:27.1-jre'

    // used for running cucumber steps + powermock
    testCompile 'junit:junit:4.12'

    testCompile 'io.cucumber:cucumber-java:4.3.0'
    testCompile 'io.cucumber:cucumber-junit:4.3.0'
}

请注意,junit:junit依赖项还包含一个junit运行器。 然后,您可以创建一个空类,例如:JUnitRunnerWrapper,其中将包含黄瓜的配置(通过注释):

@RunWith(Cucumber.class)
@CucumberOptions(
  plugin = { "pretty", "html:build/reports/tests/cucumber-html-report" },
  glue = { "gradle.cucumber" },
  features =  "src/test/resources",
  monochrome = true)
public class JUnitRunnerWrapper { 
}

为了使其正常工作,您必须为{vscode}安装Java Test Runner。然后,您将可以在JUnitRunnerWrapper下看到“运行测试/调试测试”:

enter image description here

按“调试测试”后,vscode将启动测试并触发断点:

enter image description here

其他说明:

  1. 您仍然可以通过gradle test命令运行gradle任务
  2. 可以使用vscode Run Test命令来显示Java: Show Test Output命令的输出