2013-05-08 4 views
7

Au lieu de créer constamment des configurations de débogage identiques pour mes cas de test, je voudrais simplement enregistrer quelques arguments communs à tous mes tests Junit, cliquer avec le bouton droit sur un test spécifique, puis exécuter cette configuration unique. IE Je voudrais une configuration de débogage unique qui peut prendre comme argument le cas de test actuellement sélectionné au lieu de m'obliger à le spécifier manuellement à chaque fois dans la configuration d'exécution JUnit. Mes seules options dans la boîte de dialogue semblent être de spécifier une seule classe de test ou d'exécuter tous les tests dans le projet. En conséquence, Eclipse est jonché de douzaines de configurations d'exécution pour tous mes cas de test. Au lieu de spécifier une classe de test spécifique, je voudrais spécifier une variable comme $ {container_loc} ou $ {resource_loc} pour que la classe s'exécute comme this question. Existe-t-il une variable dans Eclipse qui spécifie la classe Java actuellement sélectionnée que je pourrais placer dans le champ de classe de test dans la boîte de dialogue?Configuration d'exécution Eclipse Junit qui prend la classe de test sélectionnée en cours comme argument?

Un exemple spécifique où cela est utile est lors de l'exécution des tests unitaires Lucene. Il y a beaucoup d'arguments que vous pouvez spécifier pour personnaliser les tests, dont certains comme -ea sont requis. Chaque fois que je veux tester un cas de test spécifique dans Lucene dans Eclipse, je dois configurer manuellement ces variables dans la boîte de dialogue de configuration de débogage Eclipse: - /.

Répondre

1

Avez-vous regardé les tests paramétrés dans JUnit? Voici un exemple:

import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 

@RunWith(Parameterized.class) 
public class ParamTest { 
    @Parameters(name = "{index}: fib({0})={1}") 
    public static Iterable<Object[]> data() { 
     return Arrays.asList(new Object[][] { 
       { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } 
      }); 
    } 

    private int input; 
    private int expected; 

    public ParamTest(int input, int expected) { 
     this.input = input; 
     this.expected = expected; 
    } 

    @Test 
    public void test() { 
     Assert.assertEquals(expected, input); 
    } 
} 

Si vous voulez juste d'exécuter un test à la fois, vous pouvez utiliser des variables privées comme dans:

public class MultipleTest { 
    private int x; 
    private int y; 

    public void test1(){ 
     Assert.assertEquals(x, y); 
    } 
    public void test2(){ 
     Assert.assertTrue(x >y); 
    } 

    public void args1(){ 
     x=10; y=1; 
    } 
    public void args2(){ 
     x=1;y=1; 
    } 
    public void args3(){ 
     x=1;y=10; 
    } 
    @Test 
    public void testArgs11(){ 
     args1(); 
     test1(); 
    } 
    @Test 
    public void testArgs21(){ 
     args2(); 
     test1(); 
    } 
    @Test 
    public void testArgs31(){ 
     args3(); 
     test1(); 
    } 
    @Test 
    public void testArgs12(){ 
     args1(); 
     test2(); 
    } 
    @Test 
    public void testArgs22(){ 
     args2(); 
     test2(); 
    } 
    @Test 
    public void testArgs32(){ 
     args3(); 
     test2(); 
    } 
} 
Questions connexes