2

我想尝试一个带有黄瓜测试的示例应用程序,黄瓜测试可以只用 ruby​​ 完成,也可以用 java 完成?请帮我举个例子。

谢谢你。

4

5 回答 5

5

您可以查看我们在我们的地方编写的一个简单示例来演示 cucumber-jvm:https ://github.com/gphilipp/mowitnow-tdd

于 2012-05-02T08:43:04.770 回答
2

这个来自 Cucumber-jvm 项目https://github.com/cucumber/cucumber-jvm/tree/master/examples。Cucumber-JVM 是黄瓜的 Java 端口。可以在项目页面https://github.com/cucumber/cucumber-jvm上找到配置信息。

于 2012-05-02T13:31:43.390 回答
2

首先,从 Cucumber 团队克隆 java-skeleton 项目: https ://github.com/cucumber/cucumber-java-skeleton

这专门作为一个入门项目,应该开箱即用。一旦你有了一个工作项目,扩展它来包含你需要的东西就容易多了。您可以使用 Maven 构建项目:

mvn clean install

如果您希望从头开始,请检查 pom.xml 中是否有您需要的依赖项(至少 cucumber-java,可能还有 cucumber-junit 和 junit 本身来运行您的测试)。

创建一个 src/test/java 文件夹,您将在其中实施步骤定义 创建一个 src/test/resources 文件夹,您将在其中创建 .feature 文件

如果您使用的是 IDE(如 IntelliJ),则可能需要一个 Cucumber 插件。

于 2017-11-04T06:19:46.240 回答
0

您需要 ListItTest.java 来测试特定的集成测试,然后您需要一个功能文件、定义文件和一个示例响应 json 文件。

ListItTest.java

@RunWith(Cucumber.class)
@CucumberOptions(
        glue = {"com.abcd.cucumber.steps"},
        features = {"classpath:features/member/member-document.feature"},
        plugin = {"pretty"}
)
public class ListItTest {

}

成员密码.feature

# Change password of member
# Tags : Member's change password

Feature: Change password of member
  Scenario: Change password of a registered member
    When member enters oldPassword newPassword and confirmPassword
    Then member password will be changed

会员密码.json

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "status": {
      "type": "boolean"
    },
    "sessionExpired": {
      "type": "boolean"
    },
    "messages": {
      "type": "array",
      "items": [
        {
          "type": "object",
          "properties": {
            "shortMessage": {
              "type": "string"
            },
            "longMessage": {
              "type": "string"
            }
          },
          "required": [
            "shortMessage",
            "longMessage"
          ]
        }
      ]
    }
  },
  "required": [
    "status",
    "sessionExpired",
    "messages"
  ]
}

MemberPasswordDef.java

public class MemberPasswordDef {
    private LoginModel loginModel = new LoginModel();
    private Logger logger = Logger.getLogger(MemberPasswordDef.class);
    PasswordChangeParams passwordChangeParams = new PasswordChangeParams();

@When("member enters oldPassword newPassword and confirmPassword")
public void member_enters_oldPassword_newPassword_and_confirmPassword() {
    passwordChangeParams.setOldPassword("1234");
    passwordChangeParams.setNewPassword("1212");
    passwordChangeParams.setConfirmPassword("1212");
    loginModel.setUsername("test");
    loginModel.setPassword("9999");
}

@Then("member password will be changed")
public void member_password_will_be_changed() {
    try {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(passwordChangeParams);
        RestAssured.given()
                .header(new Header("content-type", "application/json"))
                .auth().preemptive().basic(loginModel.getUsername(), loginModel.getPassword())
                .when()
                .body(jsonString)
                .put(URL)
                .then()
                .assertThat()
                .body(matchesJsonSchemaInClasspath("schemas/members/member-password.json"));


    }
    catch(Exception e) {
        Assert.assertEquals(false, true);
        logger.error(e.getMessage(), e);
    }
   }
 }
于 2019-06-12T11:53:06.420 回答
0

我对这个问题有点晚了,但我认为这个问题被问了很长时间后,值得一个更清晰的答案,因为现在有很多很好的资源可以开始使用黄瓜。在 10 分钟内开始使用黄瓜的最佳地点是以下链接:

https://cucumber.io/docs/guides/10-minute-tutorial/

如链接中所述,您可以使用 Maven 原型创建示例项目:

mvn archetype:generate                      \
   "-DarchetypeGroupId=io.cucumber"           \
   "-DarchetypeArtifactId=cucumber-archetype" \
   "-DarchetypeVersion=5.6.0"               \
   "-DgroupId=hellocucumber"                  \
   "-DartifactId=hellocucumber"               \
   "-Dpackage=hellocucumber"                  \
   "-Dversion=1.0.0-SNAPSHOT"                 \
   "-DinteractiveMode=false"
于 2020-06-12T11:21:32.033 回答