2015-09-23 5 views
3

Dire que j'ai un test JUnit comme:essai différentes méthodes avec différents sous-ensemble de données en cas de test JUnit

@RunWith(Parameterized.class) 
public class TestMyClass { 

    @Parameter 
    private int expected; 
    @Parameter 
    private int actual; 

    @Parameters 
    public static Collection<Object[]> data() { 
    return Arrays.asList(new Object[][] {  
      { 0,1 }, { 1,2 }, { 2,3 }, { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 } 
     }); 
    } 

    @Test 
    public void test1 { //test } 

    @Test 
    public void test2 { //test } 

} 

Je veux courir test1 seulement {0,1}, {1,2} et {2,3} et exécutez test2 uniquement avec {3,4}, {4,5} {5,6}

Comment puis-je y parvenir? Editer: Les paramètres sont lus à l'exécution à partir d'un fichier.

Répondre

1

Il semble que vous ne puissiez pas utiliser différents ensembles de paramètres pour différents tests en une seule fois en utilisant JUnit standart '@Parameters'. Vous pouvez essayer junit-dataprovider. Il est similaire aux fournisseurs de données TestNG. Par exemple:

@RunWith(DataProviderRunner.class) 
public class TestMyClass { 

    @DataProvider 
    public static Object[][] firstDataset() { 
    return new Object[][] {  
      { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 } 
     }; 
    } 


    @DataProvider 
    public static Object[][] secondDataset() { 
    return new Object[][] {  
      { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 } 
     }; 
    } 

    @Test 
    @UseDataProvider("firstDataset") 
    public void test1(int a, int b) { //test } 

    @Test 
    @UseDataProvider("secondDataset") 
    public void test2(int a, int b) { //test } 

} 

Vous pouvez également créer 2 classes pour chaque test.

Mais je pense que l'utilisation de junit-dataprovider est plus pratique.

+0

Merci Pomkine. Cela a fonctionné et a résolu le but. –

+0

@AnmolGupta Heureux qu'il a aidé – pomkine

1

il y a beaucoup de bibliothèques junit qui vous permettent de le faire. si vous connaissez vos paramètres initiaux (qui ressemble à votre cas), parametrized testing with zohhak peut être la plus simple:

@RunWith(ZohhakRunner.class) 
public class TestMyClass {  

    @TestWith({ 
     "1, 6". 
     "2, 8", 
     "3, 4" 
    }) 
    public void test1(int actual, int expected) { //test } 

    @TestWith({ 
     "2, 2". 
     "0, -8", 
     "7, 1" 
    }) 
    public void test2(int actual, int expected) { //test } 

} 

si vous avez besoin de construire des paramètres en exécution (génération, la lecture du fichier, etc.), vous pouvez vérifier les choses comme junit-dataprovider ou junit-params

+0

Merci Piotrek, cela a aidé. L'ensemble de données est en fait récupéré à partir d'un fichier, donc je vais avec junit-dataprovider. –

1

vous pouvez utiliser coureur Enclosed JUnit si vous ne voulez pas utiliser une autre bibliothèque:

@RunWith(Enclosed.class) 
public class ATest { 

    @RunWith(Parameterized.class) 
    public static class TestMyClass { 

    @Parameter 
    private int expected; 
    @Parameter 
    private int actual; 

    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] {  
     { 0,1 }, { 1,2 }, { 2,3 } 
     }); 
    } 

    @Test 
    public void test1 { 
     //test 
    } 
    } 

    @RunWith(Parameterized.class) 
    public static class TestMyClass { 
    @Parameter 
    private int expected; 
    @Parameter 
    private int actual; 

    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] {  
     { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 } 
     }); 
    } 

    @Test 
    public void test2 { 
     //test 
    } 
    } 
} 

par ailleurs: vous ne devez pas envelopper les parametes avec une liste avec JUnit 4.1 2.

@Parameters 
public static Object[][] data() { 
    return new Object[][] {  
    { 0,1 }, { 1,2 }, { 2,3 } 
    }; 
}