调试gradle+;vscode中的cumber

调试gradle+;vscode中的cumber,gradle,cucumber-java,vscode-debugger,Gradle,Cucumber Java,Vscode Debugger,我试图在vscode中调试cucumber步骤定义,但运气不好 该项目相应地配置了官方手册。它编译良好,并使用以下命令显示输出: gradle cucumber 为了连接到守护进程,将以下代码行添加到gradle.properties: org.gradle.daemon=true org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 似乎vscode的连接很好,因为我可以看

我试图在vscode中调试cucumber步骤定义,但运气不好

该项目相应地配置了官方手册。它编译良好,并使用以下命令显示输出:

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'
注:

  • 我曾尝试使用eclipse连接到运行gradle守护进程,但它似乎也不起作用

  • 奇怪的是,使用默认cucumber的java runner不允许Visual Studio代码或Eclipse远程调试器在步骤定义上设置断点

    但使用cucumber的junit4 runner可以解决这个问题。这是一个更新的gradle配置(注意,您不再需要“cumber”任务):

    请注意,
    junit:junit
    依赖项还包含一个junit运行程序。 然后您可以创建一个空类,例如:
    JUnitRunnerRapper
    ,该类将包含cucumber的配置(通过注释):

    为了使其正常工作,您必须为vscode安装
    Java测试运行程序
    。然后您将能够在JUnitRunnerRapper下看到“运行测试/调试测试”:

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

    补充说明:

  • 您仍然可以通过
    gradletest
    命令运行gradle任务
  • runtest
    命令的输出可以使用vscode
    Java:showtestoutput
    命令显示
  • 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'
    }
    
    @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 { 
    }