<cucumber-jvm>我如何定义&#34;我想要&#34;黄瓜使用Java的步骤?

时间:2016-09-01 22:20:28

标签: cucumber cucumber-jvm gherkin cucumber-junit cucumber-java

我如何定义&#34;我想要&#34;使用 java

从我的功能中执行步骤

我的黄瓜项目设置如下:

Login.feature

Sep  2 20:48:01 name mysqld[12007]: 2016-09-03T03:48:01.270840Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
Sep  2 20:48:01 name mysqld[12007]: 2016-09-03T03:48:01.270934Z 0 [Note] IPv6 is available.
Sep  2 20:48:01 name mysqld[12007]: 2016-09-03T03:48:01.270951Z 0 [Note]   - '::' resolves to '::';
Sep  2 20:48:01 name mysqld[12007]: 2016-09-03T03:48:01.271052Z 0 [Note] Server socket created on IP: '::'.

然后我的步骤定义如下:

Steps.java

Feature: User Login
    I want to test on "www.google.com"

Scenario: Successfully log in 
    Given I am logged out
    When I send a GET request to "/login"
    Then the response status should be "200"

如何定义&#34;我想要&#34;使用cucumber-jvm?

进入Java

这是我的尝试,但import cucumber.api.java.en.Given; import cucumber.api.java.en.When; import cucumber.api.java.en.Then; public class Steps { @Given("^I am logged out$") public void i_am_logged_out() { //do stuff } @When("^I send a GET request to \"([^\"]*)\"$") public void i_send_a_GET_request_to(String arg1) { //do stuff } @Then("^the response status should be \"([^\"]*)\"$") public void the_response_status_should_be(String arg1) { //do stuff } } 不是有效的注释。

@When

4 个答案:

答案 0 :(得分:2)

&#34;我想测试.......&#34;是不正确的位置被认为是有效的步骤。 Cucumber认为它是对该功能的描述,并且不做任何事情。如果您想要跨场景的初步常见步骤,您应该添加一个&#39;背景&#39;。

只需添加&#34; @ Given&#34;在该步骤前面注释。

Background:
    @Given I want to test on "www.google.com"

另外只运行一个场景,并将其与其他步骤一起使用。

答案 1 :(得分:1)

你也可以这样做:

public class ClearPassword : IPasswordHasher
{
    public string HashPassword(string password)
    {
        return password;
    }
}

答案 2 :(得分:1)

“我想要”不是场景中的一个步骤,它是场景或故事的叙事概述的一部分。

<强>叙事:     在我(角色)     我想要(功能)     实现(利益)

该功能应包括许多由步骤组成的场景。

我建议你看一下BDD中的“势在必行与声明的BDD”和“无所不在的语言”。一般来说,在编写BDD时,你应该瞄准无处不在(通用而非技术)和声明性语言。

select f.flat_id, f.flat_no, uf.name from flat f left join 
usertoflat uf on f.flat_id = uf.flat_id and uf.status  = 1 

以无处不在的语言

Dictionary<string, string> dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var myImageObject = new { Id = "", Images = new Dictionary<int, string>()};
foreach(var key in dict.Keys) {
    if(key == "id") {
         myImageObject.Id = dict[key]
    }
    else {
         var imageSize = ParseForImageSize(key);
         myImageObject.Images.Add(imageSize, dict[key])
    }
}

更好的普及第三人称语言

Given I am logged out - Declarative style in ubiquitous language
When I send a GET request to "/login" - Imperative and geek domain language.
Then the response status should be "200" - Imperative and geek domain language.

另请参阅:http://grammarist.com/spelling/log-in-login/

答案 3 :(得分:1)

功能文件:

背景:

@Given I want to test on "www.google.com"

Step Def类:

@Given("I want to test on (.*)")

public void I_want_to_test_on(String arg1)

{

  //Here you can write your code..driver.get(arg1);

}