调试 gradle + vscode 中的黄瓜时未触发断点
Breakpoints are not triggered while debugging gradle + cucumber in vscode
我试图调试 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 中上下弹出。甚至有可能在 "Caught Exceptions" 上中断。但是 "custom" 断点根本没有触发。
在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 运行ner 不允许 Visual Studio 代码和 Eclipse 远程调试器在步骤定义上设置断点。
但是使用 cucumber 的 junit4 运行ner 可以解决这个问题。这是更新后的 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 运行ner。
然后你可以创建一个空的 class,例如: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
下看到"Run Test/Debug Test":
按下"Debug Test"后,vscode将启动测试并触发断点:
补充说明:
- 您仍然可以通过
gradle test
命令 运行 gradle 任务
Run Test
命令的输出可以使用 vscode Java: Show Test Output
命令显示
我试图调试 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 中上下弹出。甚至有可能在 "Caught Exceptions" 上中断。但是 "custom" 断点根本没有触发。
在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 运行ner 不允许 Visual Studio 代码和 Eclipse 远程调试器在步骤定义上设置断点。
但是使用 cucumber 的 junit4 运行ner 可以解决这个问题。这是更新后的 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 运行ner。
然后你可以创建一个空的 class,例如: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
下看到"Run Test/Debug Test":
按下"Debug Test"后,vscode将启动测试并触发断点:
补充说明:
- 您仍然可以通过
gradle test
命令 运行 gradle 任务 Run Test
命令的输出可以使用 vscodeJava: Show Test Output
命令显示