2009-11-18 1 views
0

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

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

Я застрял, используя ссылки на 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

Нет, вы можете использовать @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 [] "(это то же самое для компилятора).

+0

Спасибо, например, я повторил тест, как вы указали здесь. Есть еще одна особенность файла Spring XML, который мне понравился, что я буду скучать по этому решению, хотя для регулярных выражений не требуется, чтобы каждый обратный слэш ускорялся в дополнительное время. –

1

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

+0

Хмм, похоже, что DataProvider TestNG обычно принимает известное количество элементов. Переменным числом аргументов является трюк. Мне понравилось поведение TestNG для создания отдельных результатов теста для каждого элемента данных. –

Смежные вопросы