1

我一直在拼命尝试解决 Cucumber Junit 步骤执行。

我只是按照一个简单的例子来定义一个特性,测试和步骤如下:

Feature: Campaign Budget Calculation

Scenario: Valid Input Parameters
  Given campaign budget as 100 and campaign amount spent as 120
  When the campaign budget is less than campaign amount spent
  Then throw an Error

测试:

@RunWith(Cucumber.class)
@Cucumber.Options(glue = { "com.reachlocal.opt.dbas" })
public class CampaignTest {

}

脚步:

public class CampaignTestStepDefinitions {

    private Campaign campaign;

    @Given("^a campaign with (\\d+) of budget and (\\d+) of amount spent$")
    public void createCampaign(int arg1, int arg2) throws Throwable{
        CurrencyUnit usd = CurrencyUnit.of("USD");
        campaign = new Campaign();
        campaign.setCampaignBudget(Money.of(usd, arg1));
        campaign.setCampaignAmountSpent(Money.of(usd, arg2));
    }

    @When("^compare the budget and the amount spent$")
    public void checkCampaignBudget() throws Throwable{
        if (campaign.getCampaignBudget().isLessThan(campaign.getCampaignAmountSpent())) {
            campaign.setExceptionFlag(new Boolean(false));
        }
    }

    @Then("^check campaign exception$")
    public void checkCampaignException() throws Throwable{
        if (campaign.getExceptionFlag()) {
            assertEquals(new Boolean(true), campaign.getExceptionFlag());
        }
    }
}

当我运行 junit 时,这些步骤被跳过,结果显示它们都被忽略了。我以前也试过不用胶水,但没有帮助。不知道为什么。来自 Internet 的简单示例代码(例如添加 2 个数字)工作正常。我正在使用 STS 在 Maven/Spring 项目中运行它。

4

3 回答 3

2

@Given、@When 和 @Then 表达式与功能文件不匹配。它们是需要匹配特征文件中的行的正则表达式。

例如,对于特征线:

给定活动预算为 100,活动金额为 120

在您拥有的步骤文件中:

@Given("^一个预算为 (\d+) 且花费金额为 (\d+) 美元的广告系列")

但它应该是:

@Given("^campaign 预算为 (\d+),活动金额为 (\d+)$")

然后它应该匹配而不是忽略该步骤。

刚刚遇到了同样的问题,在 Eclipse 中很容易错过,因为尽管它确实表示它们被忽略了,但您仍然会得到一个绿色的勾号。

于 2015-08-06T08:18:48.447 回答
0

尝试这个,

import org.junit.runner.RunWith;

import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@Cucumber.Options(format = { "json:target/REPORT_NAME.json", "pretty",
    "html:target/HTML_REPORT_NAME" }, features = { "src/test/resources/PATH_TO_FEATURE_FILE/NAME_OF_FEATURE.feature" })
public class Run_Cukes_Test {

}

这一直对我有用。

于 2013-07-15T17:28:06.013 回答
0

我也遇到了同样的错误,结果发现步骤定义下的所有方法都是私有的而不是公共的

于 2017-11-27T17:37:25.397 回答