Ar3*_*r3s 9 java annotations cucumber-jvm
我已经注意到了(非常野蛮地)使用cucumber-JVM,当你定义哪些步骤具有看似相同名称的特征时,它们被认为是可互换的.
Feature: Grab that cash with both hands and make a stash
Scenario: Spend it
Given Jack has 5 dollars
When Jack wants to buy Lear Jet
Then He doesn't have enough cash
Scenario: aquire it
Given Jack is broke
But his wealth is slowly growing
When Jack has 5 dollars
Then He can afford a pack of gum
Scenario: own it
Given Jack is broke
But he has a job that's paid 5 dollar an hour
When He works an hour
Then Jack has 5 dollars
Run Code Online (Sandbox Code Playgroud)
@Given("^Jack has 5 dollars$")
public void set_it() throws Throwable {
this.jack = new Person();
jack.setCashAmount(5);
}
@When("^Jack has 5 dollars$")
public void wait_it() throws Throwable {
jack.waitFor(wealth(is(equalTo(5))));
}
@Then("^Jack has 5 dollars$")
public void check_it() throws Throwable {
assertThat("Jack should have 5 dollars by now",
jack.getCashAmount(),
is(equalTo(5)));
}
Run Code Online (Sandbox Code Playgroud)
我用黄瓜运行这个功能(用mvn/intelliJ插件/ eclipse插件/魔法水晶球/其他荒谬的媒介)
我收到以下消息:
cucumber.runtime.DuplicateStepDefinitionException: Duplicate step definitions in my.project.MySteps.wait_it() in file:[...] and my.project.MySteps.set_it() in file:[...]
at cucumber.runtime.RuntimeGlue.addStepDefinition(RuntimeGlue.java:33)
at cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend.java:151)
at cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:68)
at cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:41)
at cucumber.runtime.java.JavaBackend.loadGlue(JavaBackend.java:86)
...
Run Code Online (Sandbox Code Playgroud)
还有一堆其他不相干的线,我会饶你.
黄瓜似乎并没有使之间的差异@Given("a"),@When("a")并且@Then("a")(和@And和@But,我真的不知道他们打算什么摆在首位,因为这些都只是对"同我只是做了"语法糖)
但正如实施所暗示的那样,这三个步骤彼此截然不同.每个句子都正确地描述了测试应该做什么,并且随后的实现是单一的.
我在那里错过了什么?
有没有办法告诉Cucumber如何不仅依赖于正则表达式而且依赖于步骤类型(对我来说,这应该是默认行为)?
您的诊断是正确的 - 注释并不重要,只有正则表达式才重要。
此外,您可以用您喜欢的语言定义自己的一组注释作为关键字。如何理解它们并使用它们取决于您。
看看里面cucumber-java.jar- 你会发现包中不同语言的不同注释集cucumber.api.java(也包括非拉丁字母),例如。en_pirate版本:Avast,Aye,Blimey,Gangway,Letgoandhaul;)
它们中的每一个都没有特定的顺序或语义——它们只是正则表达式的持有者。
编辑
注释独立于特征文件中使用的表达式。您可以在功能文件和 en_pirate Avast、Aye、Blimey注释中使用默认的 Give/When/Then - Cucumber 将匹配它们。
但是,功能文件本身是由 Gherkin 解析器解析的(正如@Ar3s 在下面正确指出的那样),您可以使用一种受支持的口语语言,只需将
#language: <language code, eg. fr>
Run Code Online (Sandbox Code Playgroud)
在功能文件的第一行。您可以在Gherkin i18n JSON中找到默认英语关键字和其他语言之间的映射。尽管如此,特征文件的语言和注释的语言不需要匹配。
| 归档时间: |
|
| 查看次数: |
1931 次 |
| 最近记录: |