有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

测试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)方法


共 (2) 个答案

  1. # 1 楼答案

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

    在本例中,它非常适合我,我可以保证空格作为字符串元素分隔符:

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

    另一种替代方法是JBehave的内置Parameter Converters,它将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一样)