Точки останова не срабатывают при отладке 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'

Заметки:

  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 запустит тесты и сработают точки останова:

Дополнительные примечания:

  1. Вы все еще можете запустить задачу Gradle через gradle test команда
  2. Выход из Run Test команда может быть показана с помощью vscode Java: Show Test Output команда
Другие вопросы по тегам