Question

Puis-je avoir plusieurs méthodes avec @Parameters in junit test class qui s'exécute avec Parameterized class?

@RunWith(value = Parameterized.class)
public class JunitTest6 {

 private String str;

 public JunitTest6(String region, String coverageKind,
        String majorClass, Integer vehicleAge, BigDecimal factor) {
    this.str = region;
 }

  @Parameters
 public static Collection<Object[]> data1() {
   Object[][] data = {{some data}}

   return Arrays.asList(data);
 }

 @Test
 public void pushTest() {
   System.out.println("Parameterized str is : " + str);
   str = null;
 }

 @Parameters
 public static Collection<Object[]> data() {
   Object[][] data = {{some other data}}
   return Arrays.asList(data);
 }

 @Test
 public void pullTest() {
   System.out.println("Parameterized new str is  : " + str);
   str = null;
 }
}
Était-ce utile?

La solution

Vous pouvez utiliser le coureur Théories (recherchez les théories de mots à ce lien) pour transmettre différents paramètres à différentes méthodes.

Autres conseils

Probablement la méthode data1 , sans aucune garantie, elle utilisera celle que la machine virtuelle Java donne à junit4 en premier.

Voici le code correspondant à Junit:

private FrameworkMethod getParametersMethod(TestClass testClass) throws Exception {
    List<FrameworkMethod> methods= testClass.getAnnotatedMethods(Parameters.class);
    for (FrameworkMethod each : methods) {
        int modifiers= each.getMethod().getModifiers();
            if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
                return each;
    }

    throw new Exception("No public static parameters method on class " + testClass.getName());
}

Ainsi, la première méthode annotée statique publique trouvée sera utilisée, mais elle peut être trouvée dans n'importe quel ordre.

Pourquoi avez-vous votre test écrit de cette façon? Vous ne devriez avoir qu’une seule méthode @Parameters -annotated.

Il n’est pas prévu d’utiliser plusieurs méthodes de données. Vous pouvez le voir dans la réponse de skaffman .

Pourquoi implémenter deux méthodes de données n'est-il pas fourni?
La réponse pourrait être: Couplage.

Est-ce trop complexe de scinder ce test en deux cas? Vous seriez en mesure d'introduire un petit héritage et de partager des méthodes communes. Avec deux cas de test, vous pouvez fournir deux méthodes de données séparées et tester votre matériel très bien.

J'espère que cela vous aidera.

Vous pouvez créer des classes internes pour chaque ensemble de méthodes qui fonctionnent sur les mêmes paramètres. Par exemple:

public class JunitTest6 {

 @RunWith(value = Parameterized.class)
 public static class PushTest{
  private String str;
  public PushTest(String region) {
   this.str = region;
  }

  @Parameters
  public static Collection<Object[]> data() {
   Object[][] data = {{some data}}

   return Arrays.asList(data);
  }

  @Test
  public void pushTest() {
   System.out.println("Parameterized str is : " + str);
   str = null;
  }
 }

 @RunWith(value = Parameterized.class)
 public static class PullTest{
  private String str;
  public PullTest(String region) {
   this.str = region;
  }

  @Parameters
  public static Collection<Object[]> data() {
   Object[][] data = {{some other data}}
   return Arrays.asList(data);
  }

  @Test
  public void pullTest() {
   System.out.println("Parameterized new str is  : " + str);
   str = null;
  }
 }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top