JBehave 和 Java varargs - 如何将参数传递给 varargs 方法?



我在将我的方法与 JBehave 框架连接时遇到问题。也就是说,我有这样的 JBehave 场景:

Scenario: test1
Given all the data with attr1, attr2

现在在步骤类中,我有一个带有varargs的方法,因为根据情况,我将使用一个或多个参数

@Given ("all the data from $attribute1, $attribute2")
public void testinggg(String... attributes){
int a = attributes.length;
for(int i=0;i<a;i++){
System.out.println(attributes[i]);
}
}

不幸的是,我收到一个错误:

Given all the data with attr1, attr2 (FAILED)
(org.jbehave.core.steps.ParameterConverters$ParameterConvertionFailed: No parameter converter for class [Ljava.lang.String;)

有解决方法吗?如何将我的参数传递给我的测试gg(字符串...属性(方法?

如果您可以控制 attr 字符串之间的分隔符(并且可以安排它们出现在步骤候选项的末尾(,那么您可以将它们作为一个长字符串传入,使用 split 转换为字符串数组,然后使用该数组。

在这个例子中,它对我来说非常有效,我可以保证空格作为字符串元素分隔符:

@Then("$tabbedPaneName tabs are $tabs")
public void testTabExistence(String tabbedPaneName, String tabs) {
String[] tabsArray = tabs.split(" ");
programEntryScreen.tabbedPane(tabbedpaneName).requireTabTitles(tabsArray);
}

另一种选择是 JBehave 的内置参数转换器,可转换为List<T>参数,用于支持的<T>类型。 我在使用这种方法时发现的警告是,转换器要求元素之间的分隔符是逗号(,(,并且分隔符周围没有任何空格

此设置中的给定步骤定义:

Scenario: test1
Given all the data with attr1,attr2
!-- Note no spaces on either ^ side

可以通过以下步骤定义方法满足:

@Given("all the data with $attrs")
public void givenAllTheData(List<String> attrs) {
// do something, e.g. attrs.size()
}

这种方法的优点之一是它支持多个这样的参数,并且不限于方法参数列表中的最后一个参数(如Java varargs(。

相关内容

  • 没有找到相关文章

最新更新