Pergunta

Posso ter mais de um método com @Parameters na classe de teste JUnit que está sendo executado com classe parametrizada?

@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;
 }
}
Foi útil?

Solução

Você pode usar o Teorias corredor (procurar as teorias palavra de que possuem links) para passar parâmetros diferentes para diferentes métodos.

Outras dicas

Provavelmente o método data1, mas não há garantia de que, ele vai usar qualquer um do JVM dá junit4 primeiro.

Aqui está o código relevante do 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());
}

Assim, a primeira pública, estático método anotado que encontrar será usado, mas pode encontrá-los em qualquer ordem.

Por que você tem uour teste escrito dessa maneira? Você deve ter apenas um método anotado-@Parameters.

Não é designado para ter mais de um método de dados. Você pode vê-lo em resposta .

Por que não é fornecido para implementar métodos de dois dados?
A resposta poderia ser:. Coupling

É muito complexo para dividir este teste em dois casos de teste? Você seria capaz de introduzir uma pequena herança e compartilhar métodos comuns. Com dois testcases você poderia fornecer dois métodos de dados separados e testar suas coisas muito bem.

Espero que ajude.

Você pode criar classes internas para cada conjunto de métodos que operam sobre os mesmos parâmetros. Por exemplo:

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;
  }
 }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top