Frage

Kann ich mehr als eine Methode mit @Parameter in JUnit-Testklasse, die mit Parameterized Klasse ausgeführt wird?

@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;
 }
}
War es hilfreich?

Lösung

Sie können die Theories Läufer (Suche nach dem Wort Theorien dass link) verschiedene Parameter zu verschiedenen Methoden zu übergeben.

Andere Tipps

Wahrscheinlich die data1 Methode, aber keine Garantie für das, wird es verwenden, je nachdem, welche die JVM gibt junit4 zuerst.

Hier ist der relevante Code aus 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());
}

So ist die erste öffentliche, statische kommentierten Methode, die es verwendet wird findet, aber es kann sie in beliebiger Reihenfolge finden.

Warum haben Sie uour Test auf diese Weise geschrieben? Sie sollten nur eine @Parameters-kommentierten Methode haben.

Es ist nicht mehr als ein Datum Verfahren zu haben, bezeichnet. Sie können es in skaffman Antwort .

Warum ist es nicht vorgesehen, zwei Daten Methoden zu implementieren?
Die Antwort könnte lauten:. Die Kupplung

Ist es zu komplex diesen Test aufgeteilt in zwei Testfälle? Sie wäre in der Lage, eine kleine Erbschaft und teilen gemeinsame Methoden einzuführen. Mit zwei Testfälle können Sie zwei getrennte Daten Methoden zur Verfügung stellen und Ihre Sachen testen sehr gut.

Ich hoffe, es hilft.

Sie können für jeden Satz von Methoden innere Klassen erstellen, die auf den gleichen Parametern arbeiten. Zum Beispiel:

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;
  }
 }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top