将数组数组放入spring上下文中

时间:2009-11-18 01:41:48

标签: unit-testing spring multidimensional-array testng

我刚刚发现了一个使用Spring提供数据源的TestNG测试用例。因此,代码非常简洁明了。

但是,我需要扩展测试用例,以便他们可以获取变量输入列表。

我是否坚持使用bean引用作为列表列表,我在下面尝试过?有没有办法做到这一点,仍然很漂亮(即没有分解输入的逻辑流程,然后输出)?还有更好的方法吗?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean id="stringPatternRegexMap" class="java.util.HashMap">
        <constructor-arg>
            <map>
                <entry key="some input #1" value="expected output #1"/>
                <entry key="some input #2" value="expected output #2"/>
                <entry key="some input #3" value="expected output #3"/>
                <entry key-ref="multi-list-1" value="expected output #3"/>
                <entry key-ref="null-reference" value="null-reference"/>
            </map>
        </constructor-arg>
    </bean>

    <bean id="multi-list-1">
            <list>
                    <value>apple</value>
                    <value>banana</value>
                    <value>orange</value>
            </list>
    </bean>

    <bean id="null-reference">
            <value>
                    <null/>
            </value>
    </bean>
</beans>

请注意,原始代码似乎是使用地图而不是列表,因为它似乎更容易提供String [2]列表。

2 个答案:

答案 0 :(得分:2)

不,您可以使用@DataProvider为参数提供可变数量的参数:

  @DataProvider
  public Object[][] dp() {
    return new Object[][] {
        new Object[] { new Object[] { "a" } },
        new Object[] { new Object[] { "b", "c" } },
    };
  }

  @Test(dataProvider = "dp")
  public void g1(Object... params) {
    System.out.println("Received " + params.length + " parameters");
  }

将打印:

Received 1 parameters
Received 2 parameters

请注意,您的测试方法可以声明“Object ...”或“Object []”(它与编译器相同)。

答案 1 :(得分:1)

我会使用TestNG及其DataSource构造作为执行此操作的正确方法。你当然可以制作这个Spring配置,但由于它是测试代码,我认为TestNG更适合它。