1

我正在 intellij 中使用 Cucumber JVM (Groovy) 开发黄瓜场景。我必须说,事情比在 Eclipse 中做同样的事情要好得多。

我想解决一个小问题,让我的团队变得更好。但是由于我是 Intellij 的新手,所以我需要以下帮助:

  • 当我在 step def 文件(groovy)中时,Intellij 似乎看不到黄瓜“World”对象中定义的变量和方法。因此,对于那些有点烦人的东西,不要获得 IDE 支持(自动完成等)。我该如何解决?
4

1 回答 1

1

IntelliJ IDEA 需要World 闭包内的对象。因此,您可以在每个步骤定义文件中定义以下块:

World {
    new 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.")
    }()
}

为了清理重复的世界定义,我们使用最后胶水初始化器和一些复制粘贴:

真实/InitSteps.groovy

def world
GroovyBackend.instance.@worldClosures.clear()
GroovyBackend.instance.registerWorld {
    return world ?: (world = new RealTestWorld1()) // Actual initialization is much longer
}

遗留/InitSteps.groovy

def world
GroovyBackend.instance.@worldClosures.clear()
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", },
于 2018-09-27T17:33:09.073 回答