如何使用不同语言的黄瓜/小黄瓜?

时间:2018-08-21 12:06:16

标签: java eclipse cucumber bdd gherkin

我正在与公司中的Cucumber,Sikuli和Eclipse建立一个测试环境。我设法使一切正常,但现在我需要使.feature文件使用葡萄牙语。

据我所知,我所要做的就是在{.feature文件的开头添加注释#language: pt,但是它不起作用。

我还运行了cucumber --i18n helpcucumber --i18n pt命令,以检查该语言是否真的存在。

还有我不知道的其他配置吗?

我正在使用这些罐子

  • cucumber-core-3.0.2.jar
  • cucumber-java-3.0.2.jar
  • cucumber-junit-3.0.2.jar
  • cucumber-jvm-deps-1.0.6.jar
  • gherkin-5.1.0.jar
  • junit-4.12.jar
  • mockito-all-1.10.19.jar

3 个答案:

答案 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文件,这似乎更正确: enter image description here

奇怪的是,尽管有错误,我仍然尝试执行代码,并且可以正常工作。我真的不知道为什么我仅将关键字更改为葡萄牙语以进行测试。代码显示了错误,但执行了所有步骤,就好像一切都很好。

enter image description here

eclipse关于错误的唯一说明是missing 'Feature:' at 'Funcionalidade:'

答案 2 :(得分:0)

首先,感谢所有帮助我的人。

一段时间后,我终于发现了问题所在。

塞巴斯蒂安·勒·卡洛内克(SébastienLe Callonnec)对this thread的回答 对我说清楚了。问题出在Natural插件上。

一切从一开始就可以正常工作,但是事实证明,Natural仅支持英语。这就是为什么它引发错误但测试正在执行的原因。卸载插件后,错误消失了。