我正在与公司中的Cucumber,Sikuli和Eclipse建立一个测试环境。我设法使一切正常,但现在我需要使.feature文件使用葡萄牙语。
据我所知,我所要做的就是在{.feature文件的开头添加注释#language: pt
,但是它不起作用。
我还运行了cucumber --i18n help
和cucumber --i18n pt
命令,以检查该语言是否真的存在。
还有我不知道的其他配置吗?
我正在使用这些罐子
答案 0 :(得分:0)
您可以通过添加# language: xx
作为第一行来控制Gherkin关键字的语言。
对于葡萄牙语,应该是
# language: pt
Funcionalidade: um exemplo
可以在https://docs.cucumber.io/gherkin/reference/#spoken-languages上找到所有受支持的口语列表。您可能会在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();
}
编辑:当功能文件以Notepad
作为UTF-8
保存在Windows上时,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 | ...#>语言: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'
答案 1 :(得分:0)
我使用其他十六进制查看器打开了.feature文件,这似乎更正确:
奇怪的是,尽管有错误,我仍然尝试执行代码,并且可以正常工作。我真的不知道为什么我仅将关键字更改为葡萄牙语以进行测试。代码显示了错误,但执行了所有步骤,就好像一切都很好。
eclipse关于错误的唯一说明是missing 'Feature:' at 'Funcionalidade:'
答案 2 :(得分:0)
首先,感谢所有帮助我的人。
一段时间后,我终于发现了问题所在。
塞巴斯蒂安·勒·卡洛内克(SébastienLe Callonnec)对this thread的回答 对我说清楚了。问题出在Natural插件上。
一切从一开始就可以正常工作,但是事实证明,Natural仅支持英语。这就是为什么它引发错误但测试正在执行的原因。卸载插件后,错误消失了。