如何在不同的语言中使用 cucumber/gherkin?
How to use cucumber/gherkin in different language?
我正在公司里用Cucumber、Sikuli 和Eclipse 搭建一个测试环境。我已经设法让一切正常工作,但现在我需要使 .feature 文件在葡萄牙语中工作。
据我所知,我所要做的就是将注释 #language: pt
放在 .feature 文件的开头,但它不起作用。
我还 运行 命令 cucumber --i18n help
和 cucumber --i18n pt
来检查语言是否真的存在,它确实存在。
是否还有其他我不知道的配置?
我正在使用这些罐子:
- cucumber-core-3.0.2.jar
- 黄瓜-java-3.0.2.jar
- cucumber-junit-3.0.2.jar
- cucumber-jvm-deps-1.0.6.jar
- 小黄瓜-5.1.0.jar
- junit-4.12.jar
- mockito-all-1.10.19.jar
您可以通过在第一行添加 # language: xx
来控制 Gherkin 关键字的语言。
对于葡萄牙语,它将是
# language: pt
Funcionalidade: um exemplo
可在 https://docs.cucumber.io/gherkin/reference/#spoken-languages. The localized keywords you might lookup for example in gherkin-languages.json
找到所有支持的口语列表
一个简单的 Maven 项目。
结构
pom.xml
src/test/java/features/example.feature
src/test/java/runner/TestRunner.java
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.suboptimal</groupId>
<artifactId>cuke-test-13.so</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.cucumber>3.0.2</version.cucumber>
</properties>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${version.cucumber}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${version.cucumber}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
src/test/java/features/example.feature
# language: pt
Funcionalidade: um exemplo
Cenario: foo
Dado something given
src/test/java/runner/TestRunner.java
package runner;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/java/features/example.feature"
)
public class TestRunner {
}
运行 带mvn compile test
的测试会产生下面的错误。
Undefined scenarios:
src/test/java/features/example.feature:4 # foo
1 Scenarios (1 undefined)
1 Steps (1 undefined)
0m0.036s
You can implement missing steps with the snippets below:
@Dado("something given")
public void something_given() {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
edit 当特征文件保存在 Windows 时 Notepad
as UTF-8
插入 BOM 字符 (EF BB BD)在开头。
$ hexdump -C example.feature
00000000 ef bb bf 23 20 6c 61 6e 67 75 61 67 65 3a 20 70 |...# >language: p|
如果运行 mvn test
执行失败并出现异常。
cucumber.runtime.CucumberException: gherkin.ParserException$CompositeParserException: Parser errors:
(1:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got '# language: pt'
(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'Funcionalidade: um exemplo'
(4:3): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'Cenario: foo'
(5:3): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'Dado something given'
我用不同的十六进制查看器打开了 .feature 文件,这似乎更正确:
奇怪的是,尽管有错误,我还是尝试执行代码并且它起作用了。我真的不知道为什么。出于测试目的,我只是将关键字更改为葡萄牙语。代码显示错误,但执行了所有步骤,就好像一切正常一样。
eclipse 关于错误的唯一说法是 missing 'Feature:' at 'Funcionalidade:'
首先感谢所有帮助过我的人
经过一段时间我终于找到了问题所在。
Sébastien Le Callonnec 在 this thread 上的回答
对我说得很清楚。问题出在 Natural 插件上。
一开始一切正常,但事实证明 Natural 只支持英语。这就是为什么它抛出错误但测试正在执行的原因。卸载插件后错误消失。
我正在公司里用Cucumber、Sikuli 和Eclipse 搭建一个测试环境。我已经设法让一切正常工作,但现在我需要使 .feature 文件在葡萄牙语中工作。
据我所知,我所要做的就是将注释 #language: pt
放在 .feature 文件的开头,但它不起作用。
我还 运行 命令 cucumber --i18n help
和 cucumber --i18n pt
来检查语言是否真的存在,它确实存在。
是否还有其他我不知道的配置?
我正在使用这些罐子:
- cucumber-core-3.0.2.jar
- 黄瓜-java-3.0.2.jar
- cucumber-junit-3.0.2.jar
- cucumber-jvm-deps-1.0.6.jar
- 小黄瓜-5.1.0.jar
- junit-4.12.jar
- mockito-all-1.10.19.jar
您可以通过在第一行添加 # language: xx
来控制 Gherkin 关键字的语言。
对于葡萄牙语,它将是
# language: pt
Funcionalidade: um exemplo
可在 https://docs.cucumber.io/gherkin/reference/#spoken-languages. The localized keywords you might lookup for example in gherkin-languages.json
找到所有支持的口语列表一个简单的 Maven 项目。
结构
pom.xml
src/test/java/features/example.feature
src/test/java/runner/TestRunner.java
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.suboptimal</groupId>
<artifactId>cuke-test-13.so</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.cucumber>3.0.2</version.cucumber>
</properties>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${version.cucumber}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${version.cucumber}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
src/test/java/features/example.feature
# language: pt
Funcionalidade: um exemplo
Cenario: foo
Dado something given
src/test/java/runner/TestRunner.java
package runner;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/java/features/example.feature"
)
public class TestRunner {
}
运行 带mvn compile test
的测试会产生下面的错误。
Undefined scenarios:
src/test/java/features/example.feature:4 # foo
1 Scenarios (1 undefined)
1 Steps (1 undefined)
0m0.036s
You can implement missing steps with the snippets below:
@Dado("something given")
public void something_given() {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
edit 当特征文件保存在 Windows 时 Notepad
as UTF-8
插入 BOM 字符 (EF BB BD)在开头。
$ hexdump -C example.feature
00000000 ef bb bf 23 20 6c 61 6e 67 75 61 67 65 3a 20 70 |...# >language: p|
如果运行 mvn test
执行失败并出现异常。
cucumber.runtime.CucumberException: gherkin.ParserException$CompositeParserException: Parser errors:
(1:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got '# language: pt'
(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'Funcionalidade: um exemplo'
(4:3): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'Cenario: foo'
(5:3): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'Dado something given'
我用不同的十六进制查看器打开了 .feature 文件,这似乎更正确:
奇怪的是,尽管有错误,我还是尝试执行代码并且它起作用了。我真的不知道为什么。出于测试目的,我只是将关键字更改为葡萄牙语。代码显示错误,但执行了所有步骤,就好像一切正常一样。
eclipse 关于错误的唯一说法是 missing 'Feature:' at 'Funcionalidade:'
首先感谢所有帮助过我的人
经过一段时间我终于找到了问题所在。
Sébastien Le Callonnec 在 this thread 上的回答 对我说得很清楚。问题出在 Natural 插件上。
一开始一切正常,但事实证明 Natural 只支持英语。这就是为什么它抛出错误但测试正在执行的原因。卸载插件后错误消失。