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

时间:2017-07-19 17:30:36

标签: java testing bdd variadic-functions jbehave

我的方法与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;)

有解决方法吗?如何将我的参数传递给我的testinggg(String ... attributes)方法?

2 个答案:

答案 0 :(得分:1)

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

在这个例子中,它对我很有用,我可以保证空格为字符串元素分隔符:

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

}

答案 1 :(得分:0)

另一个替代方案是JBehave的内置Parameter Converters转换为List<T>参数,支持<T>类型。我在使用这种方法时发现的警告是,转换器要求元素之间的分隔符为逗号(,)和,而分隔符周围没有任何空格

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

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

这种步骤def方法可以满足:

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

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