Точки останова не срабатывают при отладке gradle + cucumber в vscode - PullRequest
0 голосов
/ 27 апреля 2019

Я пытался отладить определение шага огурца в 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 Ответ

1 голос
/ 29 апреля 2019

Как ни странно, использование java-бегуна по умолчанию для огурца не позволяет коду Visual Studio и удаленному отладчику Eclipse устанавливать точку останова при определении шага.

Но эту проблему можно решить с помощью бегуна 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 для vscode.После этого вы сможете увидеть «Выполнить тест / Отладочный тест» в разделе JUnitRunnerWrapper:

enter image description here

После нажатия «Отладочный тест»,vscode запустит тесты и сработают точки останова:

enter image description here

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

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