Миксин объекта Cucumber JVM (Groovy) World (Hooks) и навигация Intellij

Я разрабатываю сценарии огурцов, используя Cucumber JVM (Groovy) в intellij. Я должен сказать, что все намного лучше, чем делать то же самое в eclipse.

Я хотел бы решить одну небольшую проблему, чтобы моя команда стала еще лучше. Но так как я новичок в Intellij, мне нужна помощь в следующем:

  • Когда я нахожусь в файле step def (groovy), Intellij не может видеть переменные и методы, определенные в объекте «Мир» огурца. Так что не получайте поддержку IDE (автозаполнение и т. д.) для тех, кто немного раздражает. Как я могу это исправить?

person Armin    schedule 17.06.2013    source источник


Ответы (1)


IntelliJ IDEA ожидает объект внутри закрытия мира. Таким образом, вы можете определить следующий блок в файле определений КАЖДОГО шага:

World {
    new MockedTestWorld()
}

MockedTestWorld.groovy:

class MockedTestWorld implements TestWorld {
    @Lazy
    @Delegate
    @SuppressWarnings("GroovyAssignabilityCheck")
    private TestWorld delegate = {
        throw new UnsupportedOperationException("" +
            "Test world mock is used ONLY for syntax highlighting in IDE" +
            " and must be overridden by concrete 'InitSteps.groovy' implementation.")
    }()
}

Чтобы очистить дублированные определения мира, мы используем инициализаторы last-glue и немного копипасты:

реальный/InitSteps.groovy

def world
[email protected]()
GroovyBackend.instance.registerWorld {
    return world ?: (world = new RealTestWorld1()) // Actual initialization is much longer
}

устаревший/InitSteps.groovy

def world
[email protected]()
GroovyBackend.instance.registerWorld {
    return world ?: (world = new LegacyTestWorld1())
}

Наконец, конфигурации запуска будут такими (с разными клеями):

// Real setup
glue = { "classpath:test/steps", "classpath:test/real", },

// Legacy setup
glue = { "classpath:test/steps", "classpath:test/legacy", },
person ursa    schedule 27.09.2018