(非常残酷地引起了我的注意,对于cumming-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
@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)));
}
何时
我使用黄瓜运行此功能(使用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)
...
还有一堆其他无关紧要的话,我会饶你的。
诊断[黄瓜似乎并没有使
@Given("a")
,@When("a")
和@Then("a")
之间(以及@And
和@But
之间没有区别),我真的不知道它们的初衷是因为只是“与我刚才所做的相同”的语法糖))>但是正如实现所建议的那样,这三个步骤彼此之间有很大不同。每个句子都正确地描述了测试应该做什么,并且随之而来的实现是明确的。
“给定”步骤应设置测试先决条件
(非常残酷地)引起了我的注意,使用Cucumber-JVM,当您定义特征的步骤具有相似的名称时,它们就被认为是可互换的。给定特征:抓住...
Given Jack is broke
When Jack earns 5 dollars
Then Jack should have 5 dollars
您的诊断是正确的-批注无关紧要,只有正则表达式才重要。此外,您可以使用自己喜欢的语言定义自己的注释集,以用作关键字。您如何理解和使用它们取决于您。[查看
cucumber-java.jar
内部-例如,您会在cucumber.api.java
包中找到针对不同语言的不同注释集(也包括非拉丁字母)。en_pirate
版本:Avast
,Aye
,Blimey
,Gangway
,Letgoandhaul
;)它们每个都没有特定的顺序或语义-它们只是正则表达式的持有人。
编辑注释独立于功能文件中使用的表达式。您可以在功能文件中使用默认的Given / When / Then和en_pirate
但是,功能文件本身是由Gherkin解析器(如@ Ar3s在下面正确指出的那样解析的,您可以使用supported spoken languages中的一个,而不必放置aAvast
,Aye
,Blimey
批注-黄瓜将与它们匹配。
#language: <language code, eg. fr>
在功能文件的第一行。您可以在Gherkin i18n JSON中找到默认英语关键字与其他语言之间的映射。尽管如此,功能文件的语言和注释的语言仍不需要匹配。
[查看cucumber-java.jar
内部-例如,您会在cucumber.api.java
包中找到针对不同语言的不同注释集(也包括非拉丁字母)。 en_pirate
版本:Avast
,Aye
,Blimey
,Gangway
,Letgoandhaul
;)