测试JBehave和Java varargs如何将参数传递给varargs方法?
我在将我的方法与JBehave框架连接时遇到问题。也就是说,我有如下JBehave场景:
Scenario: test1
Given all the data with attr1, attr2
现在在steps类中,我有了一个使用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;)
有解决办法吗?如何将参数传递给testinggg(String…attributes)方法
# 1 楼答案
如果您可以控制attr字符串之间的分隔符(并且可以安排它们出现在候选步骤的末尾),那么您可以将它们作为一个长字符串传入,使用split转换为字符串数组,然后使用该数组
在本例中,它非常适合我,我可以保证空格作为字符串元素分隔符:
# 2 楼答案
另一种替代方法是JBehave的内置Parameter Converters,它将
List<T>
参数转换为受支持的<T>
类型。我在使用这种方法时发现的警告是,转换器要求元素之间的分隔符是逗号(,
)和,分隔符周围没有任何空格此设置中给定的步骤定义:
可通过此步骤定义方法满足:
这种方法的优点之一是它支持多个这样的参数,并且不限于方法参数列表中的最后一个参数(与Java varargs一样)