Точки останова не срабатывают при отладке gradle + cucumber в 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. Можно даже разбить на "Пойманные исключения". Но "пользовательские" точки останова не срабатывают вообще.
Следующая конфигурация отладки используется в 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'
Заметки:
- Я пытался подключиться к запуску демона gradle с помощью eclipse, но похоже, что он тоже не работает.
1 ответ
Как ни странно, использование java runner по умолчанию для огурца не позволяет коду Visual Studio и удаленному отладчику Eclipse устанавливать точку останова при определении шага.
Но решить эту проблему можно, используя бегун cuitumber junit4. Вот обновленная конфигурация gradle (обратите внимание, вам больше не нужна задача "огурец"):
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 {
}
Для того, чтобы это работало, вы должны установить Java Test Runner
для вскода. Тогда вы сможете увидеть "Run Test/Debug Test" под JUnitRunnerWrapper
:
После нажатия "Debug Test", vscode запустит тесты и сработают точки останова:
Дополнительные примечания:
- Вы все еще можете запустить задачу Gradle через
gradle test
команда - Выход из
Run Test
команда может быть показана с помощью vscodeJava: Show Test Output
команда