Помещение массива в весенний контекст - PullRequest
0 голосов
/ 18 ноября 2009

Я только что нашел тестовый пример TestNG, который использует Spring для предоставления своего источника данных. В результате код довольно чистый и лаконичный.

Однако мне нужно расширить контрольные примеры, чтобы они могли принимать переменный список входных данных.

Я застрял, используя ссылки бинов для списка списков, как я пытался ниже? Есть ли способ сделать это и при этом быть красивым (т.е. не разбивать логический поток ввода с последующим выводом)? Есть ли лучший способ?

<?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>

Обратите внимание, что в исходном коде, по-видимому, используется карта вместо списка, поскольку представляется более простым способом предоставления списка строк [2].

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

Нет, вы можете использовать @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 голос
/ 18 ноября 2009

Я бы использовал TestNG и его конструкцию DataSource как правильный способ сделать это. Вы, конечно, можете сделать эту конфигурацию Spring, но, поскольку это тестовый код, я думаю, что TestNG является более естественным для него.

...