2010-11-11 9 views
2

J'ai une série de tests qui testent certaines fonctionnalités liées à la timzeoneRéexécution un ensemble de JUnit teste plusieurs fois

j'ai une Avant méthode qui définit le décalage horaire par défaut à un de mes choix, et un après méthode restaure la valeur par défaut avant les tests.

Je veux essentiellement faire

Set fuseau horaire UTC

Exécuter les tests

restauration fuseau horaire

Set fuseau horaire à EST

Exécuter les tests

Restaurer fuseau horaire

Set fuseau horaire à JST

Exécuter les tests

Restaurez fuseau horaire

Les tests sont identiques dans chaque cas.

Y at-il un moyen facile de faire cela?

Répondre

5

Eh oui, il y a une belle façon de faire le même test encore et encore, juste avec un autre ensemble de données. La solution est "@RunWith (Parameterized.class)" - link to javadoc. Je suppose que vous utilisez JUnit 4 - mais TestNG a aussi une telle fonctionnalité de ce dont je me souviens.

Le code que vous devrez écrire regardera un peu comme ceci:

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

     private int fInput; 

     private int fExpected; 

     public FibonacciTest(int input, int expected) { 
       fInput= input; 
       fExpected= expected; 
     } 

     @Test 
     public void test(@HeresHowYouGetValue Type value) { 
       assertAnswerKey(new Object[][] { 
           Fibonacci, 
           { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, 
               { 6, 8 } } }); 
       assertEquals(fExpected, Fibonacci.compute(fInput)); 
     } 
} 
0

récemment créé le projet zohhak. Vous pourriez le trouver utile. il vous permet d'écrire:

@TestWith({ 
    "EST", 
    "UTC", 
    "null" 
}) 
public void testMethod(TimeZone timeZone) { 
    setTimeZone(timeZone); 
    ... 
} 

@After 
public void restoreTimezone() { 
    ... 
}