2010-04-19 7 views
1

Je me demandais comment exécuter un test JUnit4 dans un programme Java. Fondamentalement - en fonction de certaines conditions pendant l'exécution, j'ai besoin de décider quel coureur d'essai à utiliser. En utilisant Junit3 je pourrais remplacer la méthode runTest de la classe TestCase - mais dans les tests JUnit4 ne pas étendre la classe TestCase donc je n'ai rien à redéfinir ... Y a-t-il une méthode à implémenter ... ou sth else ...Exécution d'un test JUnit4 - à partir d'un programme Java

Répondre

0

Voici quelques exemples de code pour vous:

public void checkTests() throws org.junit.runners.model.InitializationError { 
    checkTestClass((Class<?>) MyTestClss.class); 
} 

private void checkTestClass(Class<?> theClass) throws InitializationError { 
    final RunNotifier notifier = new RunNotifier(); 
    notifier.addListener(new RunListener() { 
     @Override 
     public void testFailure(Failure failure) throws Exception { 
      Assert.fail(failure.getMessage()); 

     } 
    }); 

    final Runner runner = new BlockJUnit4ClassRunner(theClass); 

    runner.run(notifier); 
} 
+0

Cela semble prometteur. Le problème que j'ai est que je dois exécuter une méthode (qui ne peut pas être statique) avant chaque cas de test ... Par exemple en utilisant JUnitCore runner. Quel est le meilleur moyen d'y parvenir? – markovuksanovic

0

Le problème que j'ai est que je dois exécuter une méthode (qui ne peut pas être statique) avant chaque test

Si ce non méthode statique est quelque chose lié à la pré-conditionnement du cas de test, vous pouvez réaliser cela en annotant une méthode en utilisant @Before dans votre classe de test. Jetez un oeil à la documentation Junit4 pour le comportement de @Before.

Sinon, pour déclencher simplement une classe de test JUnit, vous pouvez utiliser le code suivant:

Runner r = 
try { 
    r = new BlockJUnit4ClassRunner(Class.forName(testClass)); 
} catch (ClassNotFoundException | InitializationError e) { // FIX if necessary: JDK 7 syntax 
    // handle 
} 
JUnitCore c = new JUnitCore(); 
c.run(Request.runner(r)); 

espoir qui aide.