如果在步骤的任何一端,在黄瓜步骤中定义可选参数很容易。如果它在中间怎么样,例如:
@When( "^(in)?active update message is received for (\\D+)(?: (\\d))? (\\D+) (\\d+)$" )
public void testStepDef(
final String optionalInactive,
final String someWord,
final int optionalInt,
final String someOtherWord,
final int id ) {
匹配的示例模式:
* inactive update message is received for word anotherword 1 // not ok
* active update message is received for word 1 anotherword 7 // ok
* inactive update message is received for word 7 anotherword 3 // ok
从这些例子中,只有后两者起作用;第一个,没有定义optionalInt
,失败了。正则表达式匹配,但方法调用失败:
cucumber.runtime.CucumberException: Failed to invoke cucumber.stepdefs.common.CommonStepDefs.testStepDef(String,String,int,String,int) in file:/step/file/location
有什么方法可以解决这个限制吗?
答案 0 :(得分:0)
正如您刚才使用正则表达式一样,您可以执行正则表达式所能做的任何事情。但是,您在此处所做的只是让步骤定义难以理解。
一般来说,当你想要让步骤定义尽可能简单时。最好有3个简单的步骤定义,而不是一个复杂的步骤定义。
因此,解决此问题的最佳方法是使用尽可能少的参数和最简单的正则表达式来编写更简单的更清晰的步骤定义。