0

我刚刚找到了一个使用 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] 列表的更简单方法。

4

2 回答 2

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[]”(与编译器相同)。

于 2009-11-19T01:59:47.090 回答
1

我会使用 TestNG 及其 DataSource 构造作为正确的方法来做到这一点。你当然可以做这个 Spring 配置,但由于它是测试代码,我认为 TestNG 是它更自然的家。

于 2009-11-18T01:52:33.827 回答