Question

Je viens de découvrir un test TestNG qui utilise Spring pour fournir sa source de données. En conséquence, le code est tout à fait propre et concis.

Cependant, je dois élargir les cas de test afin qu'ils puissent prendre une liste de variables d'entrées.

Suis-je bloqué en utilisant des références de haricots pour la liste des listes comme je l'ai essayé ci-dessous? Est-il possible de le faire et encore assez (à savoir ne pas rompre le flux logique de l'entrée suivie par la sortie)? Y at-il une meilleure façon?

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

Notez que le code d'origine semble utiliser une carte au lieu d'une liste, car il semble un moyen plus facile de fournir une liste de chaînes [2].

Était-ce utile?

La solution

Non, vous pouvez utiliser un @DataProvider pour alimenter une des méthodes d'essai avec un nombre variable de paramètres:

  @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");
  }

imprimera:

Received 1 parameters
Received 2 parameters

Notez que votre méthode de test peut déclarer soit "objet ..." ou "Object []" (c'est le même au compilateur).

Autres conseils

J'utiliser TestNG et son DataSource construire que la bonne façon de le faire. Vous pouvez certainement faire cette configuration Spring, mais comme il est code de test je pense que TestNG est la maison plus naturel pour elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top