Colocando a matriz em um contexto de primavera
-
20-09-2019 - |
Pergunta
Acabei de encontrar um caso de teste de teste que usa o Spring para fornecer sua fonte de dados. Como resultado, o código é bastante limpo e conciso.
No entanto, preciso expandir os casos de teste para que eles possam obter uma lista variável de entradas.
Estou preso usando referências de feijão para a lista de listas como tentei abaixo? Existe uma maneira de fazer isso e ainda ser bonita (ou seja, não interrompe o fluxo lógico de entrada seguido de saída)? Existe uma maneira melhor?
<?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>
Observe que o código original parece estar usando um mapa em vez de uma lista, porque parece uma maneira mais fácil de fornecer uma lista de string [2].
Solução
Não, você pode usar um @dataprovider para alimentar um método de teste com um número variável de parâmetros:
@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");
}
Imprimirá:
Received 1 parameters
Received 2 parameters
Observe que seu método de teste pode declarar "objeto ..." ou "objeto [] (é o mesmo para o compilador).
Outras dicas
Eu usaria o TestNG e sua construção de dados de dados como a maneira correta de fazer isso. Você certamente pode fazer esta configuração de primavera, mas como é o código de teste, acho que o testng é o lar mais natural para ele.