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

问题描述 投票:1回答:2

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

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中。即使它应该捕获什么类型的变量?

cucumber cucumber-jvm cucumber-java
2个回答
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作为DRY,并且仍然可以使场景变得非常简单,并且无需在步骤defs中使用正则表达式和复杂逻辑。


0
投票

在Java中,我将使用捕获组创建一个方法(是|不是),并从我将与该值进行比较的方法派生一个布尔值。另一方面,这为您的测试实现增加了逻辑,因此@ diabolist的解决方案有两个不同的步骤定义。

© www.soinside.com 2019 - 2024. All rights reserved.