如何在黄瓜Java中使用否定表达式

时间:2019-02-27 13:49:11

标签: cucumber cucumber-jvm cucumber-java

在Cucumber中,您可以编写Then表达式及其步骤定义以验证结果。问题是我不想编写2个不同的步骤定义来检查结果。一个例子是这样的:

Then the transaction is successful

Then the transaction is not successful

我该如何解决? 我发现在Ruby中,您可以按照[here]所述使用捕获可选组来合并步骤定义。那就是:

Then /^I should( not)? see the following columns: "([^"]*)"$/ do |negate, columns|
  within('table thead tr') do
    columns.split(', ').each do |column|
      negate ? page.should_not(have_content(column)) : page.should(have_content(column))
    end
  end
end

但是我不知道这在Java中是否可行。即使我应该捕获哪种类型的变量?

2 个答案:

答案 0 :(得分:3)

为什么不写两个步骤定义。每个主题都更简单,在主题上不需要正则表达式。如果将工作委托给助手方法,则步骤定义也可以删除几乎所有的代码重复

Then I should see the following columns |cols|
  should_see_cols(cols)
end

Then I should not see the following columns |cols|
  should_not_see_cols(cols)
end

现在,您已经获得了非常简单的透明步骤定义,并且可以根据需要编写方法。

如果您所有的步骤定义都只调用了一个辅助方法,那么步骤定义重复将是无关紧要的。您可以使用辅助方法将其设为DRY,并保持您的方案超级简单,并且无需在步骤def中使用正则表达式和复杂的逻辑。

答案 1 :(得分:0)

在Java中,我将创建一个带有捕获组(不是|不是)的方法,并从中将布尔值与值进行比较。另一方面,这为您的测试实现增加了逻辑,因此对于@diabolist具有2个不同步骤定义的解决方案,要说些什么。