Mettendo array di array in un contesto molla
-
20-09-2019 - |
Domanda
Ho appena trovato un banco di prova TestNG che utilizza Primavera a fornire la sua fonte di dati. Di conseguenza, il codice è abbastanza pulito e conciso.
Tuttavia, ho bisogno di ampliare i casi di test in modo che possano prendere un elenco di variabili di input.
Sono bloccato utilizzando i riferimenti di soia per l'elenco delle liste come ho tentato di seguito? C'è un modo per farlo ed essere abbastanza ancora (vale a dire non rompere il flusso logico di ingresso seguita da uscita)? C'è un modo migliore?
<?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>
Si noti che il codice originale sembra essere utilizzando una mappa al posto di una lista, perché sembra un modo più semplice per fornire un elenco di String [2].
Soluzione
No, è possibile utilizzare un @DataProvider per alimentare un metodi di prova con un numero variabile di parametri:
@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");
}
stamperà:
Received 1 parameters
Received 2 parameters
Si noti che il metodo di prova può dichiarare né "Oggetto ..." o "Object []" (è la stessa per il compilatore).
Altri suggerimenti
Vorrei usare TestNG e la sua DataSource costruire come il modo giusto per farlo. Si può certamente fare questa configurazione di Spring, ma dal momento che è il codice di prova penso TestNG è la sede più naturale per questo.